第一次python网页爬虫试验

第一次python网页爬虫试验

上周四大计老师讲了一下爬取网页数据,自己也想着实验一下。
PS:此博客仅仅用来记录自己的学习试验过程

相关库

使用了Re库和urllib.request库

代码

import urllib.request as req
import re
url='https://www.biquge5200.cc/0_7/'#小说《大主宰》的目录
webpage=req.urlopen(url)
data=webpage.read()

n=100#想要爬取的章数
data=data.decode('GB2312')#编码
t=re.findall(r'<dd><a href="(.+?)">',data,re.S)[:n+1]#正则表达式,找到每一章对应的链接,如果把这个切片去掉就是爬取所有章节

file=open('小说测试.txt','w')
header={'Sser-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66',\
    'cookie': 'ckAC=1; UM_distinctid=176d1c304f17fa-0fbb0156ac61ee-5a301e44-144000-176d1c304f2cad; Hm_lvt_17077e8d2ddd3bade67fd92a3bcbbc9f=1609836988,1609837210; width=85%25; __gads=ID=2b5639e053290b41-2246ee337cc500f3:T=1609839046:RT=1609839046:S=ALNI_MZRmMNpw_nItx5E6dTZdkXCiitYWw; CNZZDATA1278007057=1361741296-1609834062-https%253A%252F%252Fwww.google.com%252F%7C1609839463; Hm_lpvt_17077e8d2ddd3bade67fd92a3bcbbc9f=1609839987'}
#用这个header是这个网站的,如果要换网站应该还需要重新更改
#用这个header的目的是防止网站把爬虫屏蔽掉,然鹅我发现并没有什么用,淦

for i in t:
    webpage_Request = req.Request(i, headers=header)
    webpage_t=req.urlopen(webpage_Request)
    data_t=webpage_t.read()
    data_t=data_t.decode('GB2312')
    data_t_title=re.findall(r'<h1>(.+?)<',data_t,re.S)#获取章节名
    data_t_text=re.findall(r'<p>(.+?)</p>',data_t,re.S)#获取正文内容 该网站正文每一段都会用<p>...</p>来包括
    file.write(data_t_title[0]+'\n')#写下标题
    for j in data_t_text:
        file.write(j+'\n')#写下正文的每一段,每写一段换一次行
file.close()

问题所在

然鹅,每次会报错,只能爬二十多章,可能这个网站防护做的太好了,待会尝试一下别的网站
urllib.error.HTTPError: HTTP Error 503: Service Temporarily Unavailable
应该是服务器主动拒绝了爬虫的访问

成果

最后把爬来的小说半成品展示一下,只有26章QAQ
可怜的链接

总结

正则表达式,永远滴神!
总体来说有点小失败,直接哭哭,下次试试换个保护措施差一点的网站吧

第二次编辑(21-1-7)

经过亢神的指正,发现User拼成Sser了,修改后可以顺利爬到60多章,但是这时会报错:
UnicodeDecodeError: ‘gb2312’ codec can’t decode byte 0x98 in position 9591: illegal multibyte sequence
经过上网查阅,把gb2312改为gb18030即可。
参见【python问题解决】UnicodeDecodeError :‘gb2312’ codec can’t decode bytes:illegal multibyte sequence
然后就成功爬取咯咯咯

爬取后的成品

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值