1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 嵩天《Python网络爬虫与信息提取》实例3:淘宝商品比价定向爬虫

嵩天《Python网络爬虫与信息提取》实例3:淘宝商品比价定向爬虫

时间:2020-07-22 17:00:13

相关推荐

嵩天《Python网络爬虫与信息提取》实例3:淘宝商品比价定向爬虫

这一部分嵩天老师讲解的是对re库相关知识的应用,接下来将结合requests库一起对淘宝商品页面信息进行爬取。

说明:爬虫练习仅为学习,不做商用,如有侵权,烦请联系删除!

目标网页:淘宝搜索淘宝搜索是最智能的商品搜索引擎,通过大数据的运营,准确的理解商品与用户,提供精准的个性化搜索体验。/

爬取目标:与淘宝网页搜索商品“拍立得”并打印商品名称和价格信息

相关库名:requests/re

目录

1.网页解析

2.代码设计

3. 运行结果

1.网页解析

打开网页版淘宝,并输入关键词“拍立得”,得到如下页面:

观察其链接,可以看到关键词位于q值之后:

/search?q=拍立得&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.jianhua.56-taobao-item.1&ie=utf8

翻页之后得到如下链接,对比之后发现末尾多了s=44,同样方法得到第三页可以发现末尾是s=88,而每页商品数量恰好是44个,所以接下来将通过改变s值进行翻页:

/search?q=拍立得&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.jianhua.56-taobao-item.1&ie=utf8&s=44

鼠标右键点击查看页面源代码,快捷键ctrl+F调出搜索框输入页面第一件商品的价格499.00查看价格信息所在位置,可知价格放置在view_price键值对中,使用同样的方法复制商品名称发现名称信息放置在raw_title键值对中,所以要提取商品名称和价格信息,只需要检索到对应的键值对名称并把其后的值提取出来即可:

2.代码设计

完整代码如下,其实只在嵩天老师提供的源代码基础上增加了headers请求头信息,相关讲解见注释:

#实例:淘宝商品比价定价爬虫import requestsimport redef getHTMLText(headers,url):#定义获取网页源代码文本内容的函数try:r=requests.get(url,headers=headers,timeout=30)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:print('获取网页信息失败')def parsePage(ilt,html):#定义解析页面信息的函数try:plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)#匹配view_price及其后的价格信息并保存在列表plt中tlt=re.findall(r'\"raw_title\"\:\".*?\"',html)#匹配raw_title及其后的名称信息并保存在列表plt中for i in range(len(plt)):price=eval(plt[i].split(':')[1])#将获得字符串用:分割并获取其后的价格信息title=eval(tlt[i].split(':')[1])#同样的方法获得名称信息ilt.append([price,title])#将价格和名称信息存入列表中except:print('获取价格和名称信息失败')def printGoodsList(ilt):#定义打印信息的函数tplt='{:4}\t{:8}\t{:16}'print(tplt.format('序号','价格','商品名称'))count=0#定义一个计数器用于输出序号信息for g in ilt:count=count+1print(tplt.format(count,g[0],g[1]))#输出序号、价格、商品名称信息def main():goods='拍立得'#给出搜索的商品名称depth=2#指定爬取的页数start_url='/search?q='+goods#给出初始链接infoList=[]#给出空列表用于存储商品信息headers = {'user-agent': '', 'cookie': ''}#输入自己的请求头身份信息for i in range(depth):try:print('正在处理第{}页信息'.format(i+1))url=start_url+'&s='+str(44*i)html=getHTMLText(headers,url)parsePage(infoList,html)except:print('获取信息失败')printGoodsList(infoList)main()

3. 运行结果

运行代码后,IDLE页面结果显示如下:

由于设置了try-except,所以一开始有错误时总是只打印表头和空列表却不报错,一开始还以为是网页爬取的问题,觉得可能是淘宝的反爬机制无法通过只给定user-agent和cookies破译,后面反复检查发现只是有一处拼写错误,这次吸取的教训就是,如果是练习的话,不设置try-except让它报错也无妨,这样纠正错误兴许还快一些。

参考资料:

嵩天. Python网络爬虫与信息提取[EB/OL]./course/BIT-1001870001.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。