马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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,然后再进行爬取。
|