首页 > 编程知识 正文

python反爬虫原理与绕过实战pdf,scrapy爬虫案例

时间:2023-05-06 16:25:06 阅读:175616 作者:4430

三天学习Scrapy (1)简要介绍了Scrapy的实现原理,制作了使用scrapy的小爬虫。 本文详细介绍了Scrapy。

一、翻页的实现往往需要对我们在网页上获取的内容进行翻页操作。 这里,我们来看看如何在Scrapy中实现翻页操作。

要实现翻页操作,只需找到与下一页对应的url地址,找到地址后构建与url对应的请求方,传递给引擎即可。

与页码url结构url对应的请求方scrapy.request(url,callback ) callback :引擎yieldscrapy.request ) url,callback )参数的全貌: scrrapy.rest headers=None,body=None,cookies=None,meta=None,encoding='utf-8 ',Prrotes

importscrapyclasscarsdataspider (scrapy.spider ) : name=' cars _ data ' allowed _ domains=[ ' 12365 auto.com ' ] 分析数据defparse(self,response (: name _ car=response.XPath ('./tbody//TD [2] ) ) item={ } item [ ' name ]

callback :表示当前url的响应被传递给哪个函数的元:实现数据被传递给不同的解析函数,元在默认情况下具有下载延迟、请求深度等一部分数据的dont_filter:在默认情况下为False 这意味着不会继续请求请求的url地址,而是重复请求start_urls中的地址,该地址将被过滤为需要重复请求的url。 否则,程序不会启动method。 指定开机自检或获取请求标题。 接收不包含cookiescookies的词典。 cookies body :接收JSON字符串并存储开机自检数据。 发送payload_post请求时使用(下一章介绍post请求)二、要模拟登录很多网页,需要登录才能看到爬网时需要的数据。 因此,我们的爬行动物需要能够模拟登录。 许多第三方库都有模拟登录的功能。 例如,requests可以用cookie模拟登录。 selenium可以在input标签中输入文本并单击即可登录,但本文使用的Scrapy登录方式也必须和requests一样使用cookie登录。

如果不知道如何获得cookie,请阅读在开放式蜡烛之前写的这篇文章:

Python爬行动物|支撑后回环初体验

直接登录并使用cookie模拟登录的代码如下。

importscrapyclasscarsdataspider (scrapy.spider ) : name=' cars _ data ' allowed _ domains=[ ' 12365 auto.com ' ] 在下输入自己的Cookie cookies='.' #将cookies转换为cookies _ dict cookies _ dict={ I.split ) (yields crapy.request (sequest )

Post请求模拟登陆

除了通过直接使用Cookie来进行模拟登陆之外,Scrapy中也提供了两种方法来发送Post请求来获取Cookie的登陆方式。

Scrapy.FromRequest()

在使用Scrapy.FormRequest()发送Post请求实现模拟登陆,需要人为找出登录请求的地址以及构造出登录时所需的请求数据。
这里我们用github来举例子,具体的实现思路如下:

找到登陆请求的地址:点击登录按钮进行抓包,然后定位url地址为https://github.com/session找到请求体的规律:分析post请求的请求体,其中包含的参数均在前一次的响应中否登录成功:通过请求个人主页,观察是否包含用户名

代码实现如下:

import scrapyimport reclass GitSpider(scrapy.Spider): name = 'Git' allowed_domains = ['github.com'] start_urls = ['https://github.com/login'] def parse(self, response): authenticity_token = response.xpath("//input[@name='authenticity_token']/@value").extract_first() utf8 = response.xpath("//input[@name='utf8']/@value").extract_first() commit = response.xpath("//input[@name='commit']/@value").extract_first() #构造POST请求,传递给引擎 yield scrapy.FormRequest( "https://github.com/session", formdata={ "login":"ergebuxiang", "password":"123456", "authenticity_token":authenticity_token, "utf8":utf8, "commit":commit }, callback=self.parse_login ) def parse_login(self,response): res = re.findall(r"Learn Git and GitHub without any code!", response.body.decode()) print(res) Scrapy.FormRequest.from_response()

在使用上面的Scrapy.FormRequest()进行模拟登陆的时候,我们需要找到请求体来进行登陆,而在Scrapy中还提供了一种方法,可以直接使用账号密码进行登录,代码如下:

import scrapyimport reclass Git2Spider(scrapy.Spider): name = 'Git2' allowed_domains = ['github.com'] start_urls = ['https://github.com/login'] def parse(self, response): yield scrapy.FormRequest( "https://github.com/session", formdata={ "login":"ergebuxiang", "password":"123456" }, callback=self.parse_login ) def parse_login(self,response): res = re.findall(r"Learn Git and GitHub without any code!", response.body.decode()) print(res)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。