Python通过正则库爬取淘宝商品信息代码实例
使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象
我们在淘宝里搜索“python”,出来的结果
从url连接中可以得到搜索商品的关键字是“q=”,所以我们要用的起始url为:https://s.taobao.com/search?q=python
然后翻页,经过对比发现,翻页后,变化的关键字是s,每次翻页,s便以44的倍数增长(可以数一下每页显示的商品数量,刚好是44)
所以可以根据关键字“s=”,来设置爬取的深度(爬取多少页)
右键查看源码,商品名称可能的关键字是“title”和“raw_title”,进一步多看几个商品的名称,发现选取“raw_title”比较合适;商品价格自然就是“view_price”(通过比对淘宝商品展示页面);所以商品名称和商品价格分别是以"raw_title":"名称"和"view_price":"价格",这样的键/值对的形式展示的。
#coding:utf-8 importrequests importre goods='水杯' url='https://s.taobao.com/search?q='+goods r=requests.get(url=url,timeout=10) html=r.text tlist=re.findall(r'\"raw_title\"\:\".*?\"',html)#正则提取商品名称 plist=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)#正则提示商品价格 print(tlist) print(plist) print(type(plist))#正则表达式提取出的商品名称和商品价格都是以列表形式存储数据的
利用for循环,把每个商品的名称和价格组成一个列表,然后把这写列表再追加到一个大列表中:
goodlist=[] foriinrange(len(tlist)): title=eval(tlist[i].split(':')[1])#eval()函数简单说就是用于去掉字符串的引号 price=eval(plist[i].split(':')[1]) goodlist.append([title,price])#把每个商品的名称和价格组成一个小列表,然后把所有商品组成的列表追加到一个大列表中 print(goodlist)
大概的思路就是这样的。
defget_html(url): """获取源码html""" try: r=requests.get(url=url,timeout=10) r.encoding=r.apparent_encoding returnr.text except: print("获取失败") defget_data(html,goodlist): """使用re库解析商品名称和价格 tlist:商品名称列表 plist:商品价格列表""" tlist=re.findall(r'\"raw_title\"\:\".*?\"',html) plist=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) foriinrange(len(tlist)): title=eval(tlist[i].split(':')[1])#eval()函数简单说就是用于去掉字符串的引号 price=eval(plist[i].split(':')[1]) goodlist.append([title,price]) defwrite_data(list,num): #withopen('E:/Crawler/case/taob2.txt','a')asdata: #print(list,file=data) foriinrange(num):#num控制把爬取到的商品写进多少到文本中 u=list[i] withopen('E:/Crawler/case/taob.txt','a')asdata: print(u,file=data) defmain(): goods='水杯' depth=3#定义爬取深度,即翻页处理 start_url='https://s.taobao.com/search?q='+goods infoList=[] foriinrange(depth): try: url=start_url+'&s='+str(44*i)#因为淘宝显示每页44个商品,第一页i=0,一次递增 html=get_html(url) get_data(html,infoList) except: continue write_data(infoList,len(infoList)) if__name__=='__main__': main()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。