目录
- 一、 原代码问题
- 二、淘宝Robots协议
- 三、User-Agent
- 四、查找headers和cookie
- 五、 完整代码
一、 原代码问题
- 爬取不到任何内容处理
- 原因:由于淘宝的设置,虽然可以requests爬取页面内容,但正则表达式会匹配不到任何内容
- 解决:替换headers,伪装浏览器向服务器发起请求
二、淘宝Robots协议
- Robots协议,是国际上搜索引擎对所有网站内容抓取的一个内容协议,通常来说,搜索引擎都必须遵守这个协议,曾经淘宝是禁止百度抓取和收录内容页面的
- 所以大家在百度上是无法通过搜索关键词和URL找到淘宝店铺和淘宝产品页面的,如今淘宝部分开放百度蜘蛛,这也意味着百度可以遵循OROBOTS协议,对淘宝内容进行排序
详见:https://www.taobao.com/robots.txt
User-agent: Baiduspider
Disallow: /
User-agent: baiduspider
Disallow: /
三、User-Agent
- User-Agent是http协议中的一部分,属于头域的组成部分
- 这是一种向范文网站提供你所使用的浏览器类型,操作系统,浏览器内核等信息的标识
- 通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者 进行信息统计
- Windows NT 10.0 对应操作系统 Windows 10
详见:windows NT的意义和各个版本https://blog.csdn.net/flyingpig2016/article/details/53282895
headers ={ 'User-Agent':user_agent}
User-Agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
Chrome版本
Mozilla/5.0AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
注意以上的User-Agent的作用就是伪装成浏览器修改http包中的header来实现
四、查找headers和cookie
- 打开抓取的淘宝页面,F12进入开发者工具
- 选择
Network-Name
- 第一条—
Headers
—Request Headers
- 复制
user-agent
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201202221132470.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MjA3MDI0,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201202222322290.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MjA3MDI0,size_16,color_FFFFFF,t_70)
五、 完整代码
import requests
import re
def getHTMLText(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
try:
coo = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'
cookies = {}
for line in coo.split(';'):
name, value = line.strip().split('=', 1)
cookies[name] = value
r = requests.get(url, cookies=cookies, headers=headers, 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)
tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)
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 + 1
print(tplt.format(count, g[0], g[1]))
def main():
goods = 'T恤'
depth = 2
start_url = 'https://s.taobao.com/search?q=' + goods
infoList = []
for i in range(depth):
try:
url = start_url + '&s=' + str(44 * i)
html = getHTMLText(url)
parsePage(infoList, html)
except:
continue
printGoodsList(infoList)
main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)