第一个Python3爬虫实战程序,我们试着将笔趣阁上的小说抓取一下。
(1) 实战背景
小说网站-笔趣阁:https://www.bqgge.com/
笔趣阁是一个小说网站,里面有很多的小说,为了看小说方便,特地将小说抓取生产TXT文档。
PS:本实例仅为交流学习。
(2) 小试牛刀
我们先试着抓取《重生都市仙帝》的第一张试一下,网址是:
https://www.bqgge.com/biquge_2858/3638329.html
import requests
from bs4 import BeautifulSoup
url = 'https://www.bqgge.com/biquge_2858/3638329.html'
response = requests.get(url)
bs = BeautifulSoup(response.text,'html.parser')
print(bs)
抓取的内容结果:
第1章 重生_重生都市仙帝_武侠小说_笔趣阁
第1章 重生(1/2)
果可想而知。边无人的打击,张逸风居然主动去找姜凤,说答应让她当自己的女朋友。他被一个女人狠狠伤了自尊心!最终被人打成了重伤,男人最宝贵的地方也从此失去了作用。业蒸蒸日上。
本章未完,点击下一页继续阅读。
返回顶部
可以看到,我们很轻松地获取了 HTML 信息。但是,很显然,很多信息是我们不想看到的,我们只想获得如右侧所示的正文内容,我们不关心 div、br 这些 html 标签。如何把正文内容从这些众多的 html 标签中提取出来呢?这就是本次实战的主要内容。
(3) 整合代码
import requests
from bs4 import BeautifulSoup
import os
# 抓取网站的url
root_url = 'https://www.bqgge.com'
# 小说目录页面
xiaoshuo_url = 'https://www.bqgge.com/index/2858/'
# 保存文件的路径
local_path = 'D:/python/重生都市仙帝.txt'
# 总页数
total_page = 109
# 获取每篇文章内容
def getArticleContent(url):
response = requests.get(url)
bs = BeautifulSoup(response.text,'html.parser')
div_tag = bs.find('div',id='booktxt')
p_tag = div_tag.find_all('p')
for i in p_tag:
f = open(local_path,'a') # 打开文件
f.write(i.get_text()) #写入内容
f.write('\n') #换行
f.close()
#分页
page_tag = bs.find('a',id='next_url')
text = page_tag.get_text()
if text == '下一页':
getArticleContent(root_url + page_tag.get('href'))
return
#获取每篇文章的链接
def getArticleUrl(url):
response = requests.get(url)
bs = BeautifulSoup(response.text,'html.parser')
div_tag = bs.find('div',id='content_1')
a_tag = div_tag.find_all('a')
# 便利列表
for i in a_tag:
# 获取a标签的href属性
href = i.get('href')
# 获取a标签的文本内容
text = i.get_text()
# 拼接url
url = root_url + href
# 判断文件是否存在
if not os.path.exists(local_path):
f = open(local_path,'w')
f.close()
f = open(local_path,'a') # 打开文件
f.write(text) #写入标题
f.write('\n') #换行
f.close()
getArticleContent(url)
return
# 循环增加改变页码
for i in range(1,total_page):
# 拼接url
url = xiaoshuo_url + str(i)
# 调用函数
getArticleUrl(url)
很简单的程序,单进程跑,没有开进程池。下载速度略慢,喝杯茶休息休息吧。