淘宝商品信息定向爬虫
标签(空格分隔):python
功能描述
(1)目标:获取淘宝搜索页面信息,提取其中商品的名称和价格
(2)技术路线:Requests-Re
接口描述
(1)搜索接口:https://s.taobao.com/search?q=关键词
(2)翻页接口:第二页 https://s.taobao.com/search?q=关键词&s=44
第三页 https://s.taobao.com/search?q=关键词&s=88
获取headers和cookie
(1)使用chrome打开淘宝网站,登陆自己的账户,对某一关键词进行搜索
(2)点击F12,打开开发者工具,其中有四个功能模块:元素(ELements)、控制台(Console)、源代码(Sources),网络(Network)。(在此只用上元素和网络)
(3)点击网络(Network),按F5进行刷新,选择第一个search?开头的。右键打开点击copy,选择copy as curl(bash).
(4)点击进入https://curl.trillworks.com/
(5)将copy as curl(bash)获得的代码黏贴进去即可获得headers和cookie。
具体代码
import requests
import re
def gethtml(url): #定义获取url的函数
try:
header = {
'authority': 's.taobao.com',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36',
'sec-fetch-dest': 'document',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'navigate',
'sec-fetch-user': '?1',
'referer': '*',#*是referer的内容,这里隐去了。
'accept-language': 'zh-CN,zh;q=0.9',
'cookie': '*',#*是cookie的内容,这里隐去了。
}
t=requests.get(url,headers=header)
t.encoding=t.apparent_encoding
t.raise_for_status()
return t.text
except:
print('爬取失败')
return ''
def perpage(list,html):
try:
plt=re.findall(r'"view_price":"d+.d*"',html)#在元素中使用搜索,发现价格在view_price:后,因此使用正则表达式
llt=re.findall(r'"raw_title":".*?"',html)#同上
l=len(plt)
print('该页面有',l,'个商品')
for i in range(l):
price=eval(plt[i].split(':')[1])
title=eval(llt[i].split(':')[1])
list.append([price,title])
except:
print('解析失败')
return ''
def printlist(list,num):
root='{0:^20} {1:^20} {2:^20}'
print(root.format('序号','价格','商品名称'))
count = 0
for g in list:
try:
count = count + 1
if count<=num:
print(root.format(count,g[0],g[1]))
except:
print('打印错误')
return ''
def main():
goods=input('请输入需要查询的商品名称:')
start_url='https://s.taobao.com/search?q='+goods
width=eval(input('请输入爬取的页码:'))
num=eval(input('请输入爬取的商品数量:'))
list=[]
for j in range(width):
try:
url=start_url+'&S='+str(44*j)
html = gethtml(url)
perpage(list, html)
except:
continue
printlist(list,num)
main()
参考
[1] https://blog.csdn.net/Guanhai1617/article/details/104120581
[2]《Python网络爬虫与信息提取》http://www.icourse163.org/course/BIT-1001870001