第一次python网页爬虫试验

第一次python网页爬虫试验

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

目录

  • 第一次python网页爬虫试验
    • 相关库
    • 代码
    • 问题所在
    • 成果
    • 总结
  • 第二次编辑(21-1-7)

相关库

使用了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'
',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'

(.+?)<',data_t,re.S)#获取章节名 data_t_text=re.findall(r'

(.+?)

'
,data_t,re.S)#获取正文内容 该网站正文每一段都会用

...

来包括
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
然后就成功爬取咯咯咯

爬取后的成品

你可能感兴趣的:(python,爬虫,正则表达式)