|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- """淘宝商品定向比价"""
- import requests
- import re
- def getHTMLText(url):
- try:
- kv={'user-agent':'Mozilla/5.0'}
- r=requests.get(url,headers=kv,timeout=30)
- r.raise_for_status()
- r.encoding=r.apparent_encoding
- return r.text
- except:
- return ""
- def parsePage(ilt,html): #对每一个页面进行解析
- try:
- plt=re.findall(r'"view_price"\:"[\d.]*"',html)#正则表达式将view_price和后面的价格\d.表示出来
- tlt=re.findall(r'"raw_title"\:".*?"',html)#*?表示最小匹配,匹配的是"raw_title"为键,""为值的键值对,最小匹配表明她只取得最后一个双引号为止得内容,进行约束
- for i in range(len(plt)):
- price=eval(plt[i].split(':')[1])
- #对price类型进行提取,去掉前面得view_price字段,只保留价格部分,这里的eval函数可以将我们获得的字符串的最外面的”“去掉,用split来进行分割
- title=eval(tlt[i].split(':')[1])
- ilt.append([price,title])
- except:
- print("")
- def printGoodsList(ilt):
- #定义一个tplt模板,表示我们希望我们获取的信息以怎样的方式打印出来,用{}来指定第一个位置长度为4,第二个为8
- tplt="{:4}\t{:8}\t{:16}"
- print(tplt.format("序号","价格","商品名称"))
- count=0 #定义一个输出信息的计数器count
- for g in ilt:
- count=count+1
- print(tplt.format(count,g[0],g[1])) #count商品序号,g[0]g[1]为名称和价格
-
- def main():
- goods='书包'
- depth=2 #设定爬取深度为2,就是爬取当前页面和第2页
- start_url='https://s.taobao.com/search?q=' + goods #通过将url与goods结合实现对商品的检索
- infoList=[]
- for i in range(depth):
- try:
- url=start_url + '&s=' +str(44*i)
- #这里的44*i是指对每一个页面,地址后面的有一个变量s是44的倍数
- html=getHTMLText(url)
- parsePage(infoList,html)
- except:
- continue
- #这里用try-except来进行异常处理,如果访问第一个页面有问题,跳转到下一页
- printGoodsList(infoList)
- main()
复制代码
运行结果:
序号 价格 商品名称
Process finished with exit code 0
我跟着北理工一个老师的教学视频写的此代码,但是我却爬取不到商品信息,是哪里出了问题呢?求助大神!
我之前也写过,淘宝加了反爬策略。
我是用了cookie来绕过。你加上cookie试试。
但是每次都加比较麻烦,所以推荐先post登录信息,得到cookie,然后再进行爬取。
|
|