该实例主要的问题就是cookie的如何获取。
cookies是保存在浏览器中的来记录我们的信息的,但HTTP协议是一种无状态协议,在数据交换完毕后,服务端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。浏览器开启到关闭就是一次会话,当关闭浏览器时,会话cookie就会跟随浏览器而销毁。
淘宝网cookies的查看方式:
输入自己的账号密码登录,来到淘宝网首页,之后按F12检查元素,然后按下图所示。按下F12之后有可能是一片空白,此时需要再次刷新一下当前网页即可,然后,按下图所示查看Doc文档,你可以把所有的Doc文档都查看一下看看有没有cookie,然后把它复制到Python代码中即可。
参考代码:
import requests
import re
import csv
def gethtml(url):
kv={'User_Agent':'Mozilla/5.0'}
#cookies具有有效期!!!
path='D:/Python/mycookies.txt'#这里存放的是我登录淘宝网后查看的cookies
with open(path,'r')as f:
mycookies=f.read()
mycookies=mycookies.split(';')
cookies={}
for cookie in mycookies:
name,value=cookie.strip().split('=',1)
cookies[name]=value
try:
r=requests.get(url,headers=kv,cookies=cookies,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
print("访问成功")
return r.text
except:
print("访问失败")
return''
def getpage(data,html):
try:
plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)#商品价格的正则表达式
tlt=re.findall(r'\"raw_title\"\:\".*?\"',html)#商品名称的正则表达式
#print(plt)
for i in range(len(plt)):
price=eval(plt[i].split(':')[1])
title=eval(tlt[i].split(':')[1])
data.append([title,price])
print('getdata success')
except:
print("getdata fail")
def download(data):
path='D:/Python/my.csv'
try:
f = open(path,"w",newline="")
writer = csv.writer(f)
writer.writerow(['序号''商品','价格(单位:元)'])
for i in range(len(data)):
writer.writerow([str(i),data[i][0],data[i][1]])
#writer.writerows(data)
print('='*20,'保存成功','='*20,'\n')
except:
print('保存失败')
f.close()
def main():
keyword=input('请输入爬取的商品的名字:')
depth=3
turl='https://s.taobao.com/search?q='+keyword
infolist=[]
for i in range(depth):
try:
url=turl+"&s="+str(i*44)
html=gethtml(url)
getpage(infolist,html)
except:
print('warning')
continue
download(infolist)
main()