简介
Python是一个简洁的语言,集成性非常高,我们可以使用集成的工具库,本文中用到的库有requests、re
找到我们需要爬取的链接
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答点击即可加入
输入关键字
自己需要爬取的数据
比如:洗面奶
选择评论数最多
(不要去点销量,因为很大部分原因这个可以用钱买)
进入之后
打开开发者工具,F5刷新页面,点击商品评论
抓取链接
这个弄错了,就是在扯犊子了
回车后,
没有看到突出显示的就上下翻,找到为止
复制我们找到的
URL:
/comment/productPageComments.action?callback=fetchJSON_comment98&productId=5561746&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=11
代码部分
先把所需要的库导入
import reimport requests12
定义需要的变量
#由于链接实在太长,我们把链接赋值给一个变量urlurl = "/comment/productPageComments.action?callback=fetchJSON_comment98&productId=5561746&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"#这里我们然jd知道,我们是通过浏览器访问的(你懂的!)headers= {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 Edg/86.0.622.69"}#定义用于接收数据的列表productColor, referencComments, referenceName, referenceTime, nickname = [],[],[],[],[]12345678
获取信息
#通过requests模块获取到网页信息content = requests.get(url=url, headers=headers)12
获取关键数据
在这里我们使用正则获取关键数据(re)模块
如果懂json模块的大佬可以直接使用json进行数据整理,我这边主要介绍数据获取思路
我们先把链接放到浏览器中看一下
提取关键字
如:用户名 ,时间,规格,评论,产品名称
关键字:用户名
在我这里是直接找评论区第一个用户(使用Ctrl + F)进行字符串搜索
也可以使用其它的关键字都是一样的
re模块使用
说明位置的特殊字符- ^表示行首:^hello 匹配 hellohello 中的第一个 hello- $表示行尾 hello$ 匹配 hellohello 中的第二个 hello说明数量的特殊字符- ?:表示 0 个或者 1 个,例如 ab?c 匹配 ac 和 abc- +:表示 1 个或更多个,例如 ab+c 匹配 abc\abbc\ab...c- *:表示 0 个或更多个,例如 ab*c 匹配 ac\abc\ab...c- {n} 表示匹配 n 个, ab{3}c 只匹配 abbbc- {n,} 表示匹配最少 n 个,+ 对应 {1,},* 对应 {0,}- {n,m} 表示匹配 n 到 m 个,? 匹配 {0,1}说明类型的特殊字符- [a-zA-Z] 表示一个大小写字母,例如前面的例子匹配任何一个字母- [^a-z]表示除了小写的字母以外的所有字符- \d \D \d 对应 [0-9], \D 对应[^0-9]- \s \S \s 对应 [\n\r\t] \S对应[^\n\r\t]- \w \W \w 对应 [0-9a-zA-Z_] \W 对应[^0-9a-zA-Z_]- . 表示任意一个字符123456789101112131415161718
#把用户名前后直接拿过来分析'''06-21 17:54:06","nickname":"y***2","replyCount2":'''nickname += re.findall(r'","nickname":"(.*?)","', content.text)123
找到时间,规格,评论,产品名称
#同样的把时间,规格,评论都拿过来看一下'''规格:":2,"productColor":"净亮洁面(控油+亮肤)","productS产品:f.jpg","referenceName":"欧莱雅(LOREAL)男士控油炭爽抗黑头双支装(洁面*2 赠:洁面*2)洗面奶男 去黑头 去角质","first评论:8e","content":"作为一个长期油皮者,各种热[门的洗面奶都用\n过,总是各种问题,洗了很干涩。只有这款,\n两支,一支早上用,补水。一支晚上用,控油,\n晚上也睡得很舒服。早.上起来脸上不会油腻油\n腻的感觉了,以后也都会用这款洗面奶了,产品\n好,会一直支持的","cr时间:持的","creationTime":"-06-27 22:02:22","isD'''#使用正则获取关键数据#时间:referenceTime += re.findall(r'","creationTime":"(.*?)","', content.text)#产品名称:referenceName += re.findall(r'","referenceName":"(.*?)","', content.text)#评论:referencComments += re.findall(r'","content":"(.*?)","', content.text)12345678910111213141516171819
结果
这个时候我们输出看一下
#先把数据一一对应Info = [nickname, referenceTime, referenceName, referencComments, productColor]#打印for i in range(0,len(nickname)):print(nickname[i],referenceTime[i], productColor[i],referenceName[i],referencComments[i])12345
进阶
到现在只获取到一页的信息,这怎么能叫做爬虫
现在我们手动找到下一页的链接
按照老方法找到下一页的链接
第二页的链接
/comment/productPageComments.action?callback=fetchJSON_comment98&productId=5561746&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=11
对比一下跟第一条链接有什么区别
很快就找到了
第一条为page=0,第二条page=1
所以在这块我们要把page设置成一个变量
定义URL变量
将之前写的url链接更改
url = "/comment/productPageComments.action?callback=fetchJSON_comment98&productId=5561746&score=0&sortType=5&page={}&pageSize=10&isShadowSku=0&fold=1"1
我们需要知道一页为10条,在这里我们就测试100条
进行循环获取信息
for index in range(0, 10):#通过requests模块获取到网页信息content = requests.get(url=url.format(index), headers=headers)#用户名nickname += re.findall(r'","nickname":"(.*?)","', content.text)#时间:referenceTime += re.findall(r'","creationTime":"(.*?)","', content.text)#产品名称:referenceName += re.findall(r'","referenceName":"(.*?)","', content.text)#评论:referencComments += re.findall(r'","content":"(.*?)","', content.text)#规格productColor += re.findall(r'"productColor":"(.*?)","', content.text)12345678910111213
再次输出结果
这里我也不知道是不是100条,我们加个索引进行输出
for index, i in enumerate(range(0,len(nickname))):print(index, nickname[i],referenceTime[i], productColor[i],referenceName[i],referencComments[i])12
输出结果
滑倒最后
没错0-99=100
到这里就结束了,谢谢大家,不惜勿喷