1. 爬虫几个主要部分
- 根据链接获取页面信息
- 从页面信息获取需要的信息:正则匹配,bs4,xpath等
- 保存:文件、数据库
最难得就是中间匹配部分,要针对每个网站的内容特点和要获取的信息综合选择合适的匹配策略。
其他重要方面:
- 中文乱码怎么处理:主动设置编码格式
- 如果需要很多页面,还要获取这些页面的链接列表。
- 防止被屏幕:加header头,加随机访问间隔
- 验证码:这个没办法
2. 爬虫实战
目的:爬取一本小说。先从目录页获取链接列表,再从每个页面获取文本,保存到本地文件。
环境:python3,jupyter notebook
(1) 获取url列表
import requests
import re
from bs4 import BeautifulSoup
import time,random
# 从目录页,获取链接列表
page="https://www.27k.net/read/63021"
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
}
respose=requests.get(page, headers);
assert respose.status_code==200,'Error: requests.get'
soup=BeautifulSoup(respose.text,"lxml")
arr=soup.find_all("ul", attrs={"id":"chapterList"})[0].find_all("a")
arr
输出:
[<a href="/read/63021/24610005.html">第1章</a>,
<a href="/read/63021/24610006.html">第2章</a>,
<a href="/read/63021/24610007.html">第3章</a>,
...
(2) 从一个页面获取内容并保存
import requests
import re
from bs4 import BeautifulSoup
import time,random
# 为防被封,不能高频访问:模拟用户的点击间隔
def pause(seconds=2):
#随机时间段后[2s,12s]执行
pause=seconds+3*random.random()
print(' sleep '+str(pause) + "second \n")
time.sleep(pause)
def write2file(url):
#1. get response
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
}
respose=requests.get(url, headers);
assert respose.status_code==200,'Error: requests.get'
#2. get info
soup=BeautifulSoup(respose.text,"lxml")
patterns=soup.find_all("div","txtnav")[0]
#3. write to file
fw=open('novel.txt','a');
i=0
for item in patterns:
i=i+1
if i<3: #过滤掉前面重复信息
continue
text=item.string
if None != text:
if text.strip() != "": #跳过全是空格的行
#print(" "+text)
text=re.sub("章\s{14}", "章\n", text)
fw.write(" "+text)
fw.write("\n\n\n");
fw.close();
# #url0="https://www.27k.net/read/63021/%s.html"
# i=0
# for i in range(0,1):
# url=url0 % str(24610005+i);
# print(i, url)
# write2file(url)
# pause(1);
# print("end")
(3) 应用到批量url中
i=0
for ele in arr:
i =i +1
url ="https://www.27k.net" +ele.get("href")
print(i, url)
write2file(url)
pause(1);
print("end") #284
等待程序运行结束(因为设置了随机等待时间,该示例需要几十分钟),就能在工作目录看到一个 txt 文件。
根据原网页,为该txt手动添加一些头尾信息,保存到手机,就可以阅读了。文章来源:https://www.toymoban.com/news/detail-479953.html
比手动一个一个复制粘贴省力多了,还不容易出错。文章来源地址https://www.toymoban.com/news/detail-479953.html
到了这里,关于python 爬虫实战 | 下载一本小说的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!