使用多进程 及 代理池爬取小说(python)

1.

b4c024197c9948d7b7eb92d5175f3133.png

 

(1)

打印出现NoneType的地方

结果显示:

<class 'NoneType'>

原因:经过查阅资料发现:出现这种问题就是,获取不到数据。原因就是该网站被爬太多次,我们被该网页服务器的反爬虫程序发现了,并禁止我们爬取。因此我们需要模拟浏览器,重新给服务器发送请求,并且添加头等信息headers,headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据。对反爬虫网页,可以设置一些headers信息,模拟成浏览器取访问网站 。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA1MjA1NQ==,size_16,color_FFFFFF,t_70#pic_center

 

注意:headers中有很多内容,主要常用的就是user-agent 和 host,他们是以键对的形式展现出来,如果user-agent 以字典键对形式作为headers的内容,就可以反爬成功,就不需要其他键对;否则,需要加入headers下的更多键对形式。

你可以找你的浏览器的header,我这里直接给出一个header运行

header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}

未解决

参考文章:解决python爬虫时遇到AttributeError: ‘NoneType‘ object has no attribute ‘find_all‘_小朱小朱绝不服输的博客-优快云博客

(2)

BeautifulSoup报"AttributeError: 'NoneType' object has no attribute 'find_all' "的原因可能有很多,包括URL错误、HTML代码有误、标签、属性不存在等等。

在使用find_all()方法查找标签时,应该先确保标签、属性存在,避免出现这个错误。同时,推荐使用其他解析器,如lxml,来解决这个问题。

print(soup.find(attrs={'class':'mb20'}).find_all('a'))

ed3dd6d30e7f4b628b38b93ddda4bade.png

 c8043baef825482592493b43e3169ebb.png

729e8c8fe223460485e156b5cd261f0b.png

 

 534bf97ea43c496ebe577e02e5ffb0bc.png

标签名不唯一,find方法

获取到指定文档从上到下第一个指定标签

 解决思路:换一本书

9463116c084d455b90bb665be91aff4b.png

 

5eb92d77cd974021b0df5e25ec8adb9b.png

 发现换一本书结构也是一样的,box_con标签还是有两个。且最新章节正文部分在一个box_con容器内

for i in (soup.find_all(attrs={'class':'box_con'}).find_all('a')):

e336f0e04bef4280b27a1db1313ed91c.png

 

for i in (soup.find_previous(attrs={'class':'box_con'}).find_all('a')):

30fd57a1cc6f4acc8797e05cac45355c.png

 

for i in (soup.find_next(attrs={'class':'box_con'}).find_all('a')):

5b090287b5d7467cb0d88dbfa2252456.png

 

for i in (soup.find_previous(attrs={'class':'box_con'})[1:].find_all('a')):

914ac2e25e6e440b9e4c0ce8f89ce3b8.png

 

for i in (soup.find_all(attrs={'class':'box_con'})[1].find_all('a')):

成功

参考文章:

BeautifulSoup报”AttributeError: ‘NoneType’ object has no attribute ‘find_all’ “异常的原因以及解决办法_Python技术站

2.

数据在打开某一节的内容,打开抓包工具netork>Fetch>payload data = { 'articleid': '173_173952', 'chapterid': chapterid, 'pid': flag, }

55c90fcf37bb4e5783d4a896028b46ae.png

http://www.ibiqu.org/173_173952/

打开一章的内容,打开抓包工具netork>Fetch>payload

binbin41eabe28f0084d09b073646bd6fa919a.png

屏蔽部分代码后,运行结果都是目录的内容

3b526e89a83f486b9f295738cf618ed6.png

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值