100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python爬虫 记录一次爬取淘宝的过程

python爬虫 记录一次爬取淘宝的过程

时间:2021-11-13 10:52:44

相关推荐

python爬虫 记录一次爬取淘宝的过程

淘宝可以说是一个检验爬虫技术是否过关的最强关卡了,下面来打破它吧。

淘宝的所有操作差不多都是在登录的状态下进行的,这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了。

方式一:(selenium)

使用selenium模块,使用自动化模块进行爬取淘宝,对自己需要的信息进行爬取下来,这是一个很简单的方式,但是这也是一个效率比较低下的爬虫形式。这个简单的自动化爬取形式就不详细讲解了。但是有一个值得注意的点就是登陆的时候,会被检测出内容输入的速度过快,之后弹出一个滑动验证条,需要对验证条进行处理才能够登陆成功。

方式二:(requests)

使用requests模块,对淘宝页面发起请求,但是在发起请求之前就需要携带上淘宝账号的cookies信息,如果没有携带cookies信息,那么对淘宝发起的所有请求都没有任何有用信息返回。

第一步:登录淘宝保存cookies信息,这个只需要登录一次保存cookies信息,那么很长一段时间都可以不会过期了。所以首先写一个简单的代码获取登录之后的cookies信息,这个可以直接使用selenium模块进行登录,保存cookies信息,毕竟发起登录post请求,不好破解淘宝的加密参数。这个简单就不详细讲解了。

第二步:淘宝对于搜索页面的网址请求反爬措施很强,这个可以不考虑,但是在淘宝的首页却有我们想要的一切,这需要在淘宝的首页找到对应的链接,就可以对这个链接发起请求了。

淘宝首页列出了各种产品信息,这需要找到自己需要的产品,点击进去,获取对应的url,这时候就可以进行我们熟悉的环节了(爬虫)。

第三步:使用第二步中提取到的url(例如:/list?spm=a21bo..67-links-0.10.5af911d9L2LhUy&q=JK%E5%88%B6%E6%9C%8D&cat=16&style=grid&seller_type=taobao 这是一个女装下的JK制服链接)

导入需要使用到的模块

import requests # 发起网络请求import parsel # xpath 分析页面import json# 读取保存在文件中的cookies信息 import time import re # 分析提取页面复杂信息from requests.cookies import RequestsCookieJar# 为请求添加从cookies信息from fake_useragent import UserAgent# 设置请求头,可以直接使用浏览器请求头

读取保存在文件中自己账号的cookies信息:

session = requests.session()# 创建一个会话session.headers = header # 设置会话请求头# 这里对保存在文件中的cookie对象进行提取jar = RequestsCookieJar()with open("cookies.txt", "r") as f: cookies = json.load(f)for cookie in cookies:jar.set(cookie['name'], cookie['value']) # 插入cookies信息

3.检测保存的cookies信息是否过期,使用自己账号的主页面进行检测(主页面url:/my_taobao.htm)

def main():# 请求自己账号的主页面,测试cookies是否过期,如果过期及时更换res = session.get('/my_taobao.htm',cookies=jar)time.sleep(3)if "自己的账号名称" in res.text:print("cookies还是可用的")parse() # 发起商品网页请求else:print("cookies已经过期,登陆不成功,重新获取")

4.对商品页面发起请求,提取商品信息

def parse():res = session.get(url, cookies=jar) # 使用cookies进行请求网页res.encoding = 'UTF-8'if res.status_code == 200:html = parsel.Selector(res.text)contents = html.xpath('//head/script[last()]/text()').extract_first()# 提取页面的中所有商品信息内容contents = re.findall(r'"itemlist":(.*?),"p4p"', contents, re.S)# 提取有用商品的信息if len(contents) != 0:content = contents[0][:-1:] + "}" # 构造字典格式true = True # 特殊关键字的处理false = Falsecontent = eval(content) # 把字符串格式内容转换为字典print(type(content))itemlists = content['data']['auctions']# 使用字典提取所有商品信息print(type(itemlists))print(len(itemlists))for item in itemlists:print("商品名称:", item['raw_title'])print("商品链接:", item['detail_url'])else:print("length:", len(contents))print("没有提取到商品信息,重新分析页面")else:print("登录失败")

5、这样子就可以提取到了淘宝的网页商品信息了,还有就是需要提取每一个商品的总页数,之后使用一个循环直接遍历全部的页面就可以了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。