1、获取cookies,这里用的是selenium库的get_cookies()函数:
from selenium import webdriver
import time
import requests
import re
headers ={
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36'
}`在这里插入代码片`
browser = webdriver.Chrome()
url = 'https://login.taobao.com/member/login.jhtml'
browser.get(url)
time.sleep(20) # 留20秒或者更长的时间来手动进行登录;推荐扫码登陆
cookies = browser.get_cookies() # 获取Cookie
print (cookies)
打印输出后获得的是一个列表,列表元素包含一个个字典,字典中包含各个cookie信息
2、创建一个cookies_dicth空字典,存储从各个cookie提取到的name和value,处理成requests库使用cookies时所需要的格式:
代码如下
cookie_dict = {}
for item in cookies:
cookie_dict[item['name']] = item['value']
3、使用获取到的cookies利用requests登陆指定url,获取源代码并打印输出,代码如下:
url = 'https://s.taobao.com/search?q=大码女装'
res = requests.get(url, headers=headers, cookies=cookie_dict).text
print(res)
打印结果如下:
4、根据获取到的源代码,我们可以写出相应的正则表达式提取所需的内容,这里我们以提取标题、价格、付款人数为例,代码如下:
title = re.findall('"raw_title":"(.*?)"', res)
price = re.findall('"view_price":"(.*?)"', res)
sale = re.findall('"view_sales":"(.*?)人付款"', res)
for i in range(len(title)):
print(title[i] + ',价格为:' + price[i] + ',销量为:' + sale[i])
打印输出后的结果如下:
至此,我们完成了cookies模拟登陆淘宝并爬取数据,完整代码如下:
from selenium import webdriver
import time
import requests
import re
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
# 1.模拟登陆 + 获取Cookie
browser = webdriver.Chrome()
url = 'https://login.taobao.com/member/login.jhtml'
browser.get(url)
time.sleep(20) # 留20秒或者更长的时间来手动进行登录;推荐扫码登陆
cookies = browser.get_cookies() # 获取Cookie
# 2.修改Cookie数据格式
cookie_dict = {}
for item in cookies:
cookie_dict[item['name']] = item['value']
# 3.Requests库使用Cookie
url = 'https://s.taobao.com/search?q=王宇韬'
res = requests.get(url, headers=headers, cookies=cookie_dict).text
# 验证是否登录成功
if 'fgwyt94' in res:
print('登录成功')
# 4.正则表达式提取信息
title = re.findall('"raw_title":"(.*?)"', res)
price = re.findall('"view_price":"(.*?)"', res)
sale = re.findall('"view_sales":"(.*?)人付款"', res)
for i in range(len(title)):
print(title[i] + ',价格为:' + price[i] + ',销量为:' + sale[i])