python使用requests库爬取淘宝指定商品信息
在搜索栏中输入商品
通过F12开发者工具抓包我们知道了商品信息的API,同时发现了商品数据都以json字符串的形式存储在返回的html内
解析url后发现
q
参数代表搜索的关键字
p4ppushleft
参数代表每页展示的商品个数
s
参数为44的倍数,可以通过翻倍这个参数完成翻页请求
通过抓包复制cookie
通过requests库向API发起请求
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'
}
cookies = {
...
}
# 需要带上头部和登录后的cookie
res = requests.get("https://s.taobao.com/search?q=键盘&p4ppushleft=1,48&s=44", cookies=cookies, headers=headers)
#获取API返回的内容
code = res.text
因为里面的内容返回是html,我们通过正则表达式提取需要的json字符串,并转换为python对象
pattern = re.compile(r'{"pageName.*?shopcardOff":.*?}}')
jsObj = json.loads(pattern.search(code).group())
分析json后发现商品信息都存放在jsObj["mods"]["itemlist"]["data"]["auctions"]
中
通过对象提取全部内容
for node in jsObj["mods"]["itemlist"]["data"]["auctions"]:
print (node["title"],
node["detail_url"],
node["view_price"],
node["view_sales"],
node["comment_count])
完整的爬虫代码
import json
import logging
import requests
import re
def getCode(url):
try:
res = requests.get(url, cookies=cookies, headers=headers)
res.raise_for_status()
res.encoding = res.apparent_encoding
return res.text
except Exception as e:
logger.warning(e)
return None
def getJsonObj(code):
return json.loads(pattern.search(code).group())
if __name__ == '__main__':
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'
}
cookies = {...}
pattern = re.compile(r'{"pageName.*?shopcardOff":.*?}}')
keyword = "键盘"
logger = logging.getLogger("淘宝商品爬虫")
for i in range(10):
logger.info("正在爬取第" + str(i + 1) + "页数据")
code = getCode("https://s.taobao.com/search?q=" + keyword + "&p4ppushleft=1,48&s=" + str(i * 44), cookies=cookies)
if code != None:
for node in getJsonObj(code):
print (node["title"],
node["detail_url"],
node["view_price"],
node["view_sales"],
node["comment_count"])
此片文章仅供学习交流使用,不做任何商业用途