使用bs4实现将诗词名句网站中三国演义小说章节内容爬取

爬取思路:

1.先分析网页是否通过ajax动态获取数据,刷新看页面有没有变化,发现网站非ajax动态获取数据的页面,不需要抓包,直接只用网站就可以爬取,就可以获取headers和url
2.我们可以抓取章节页面的网页源码数据,再实例化一个BeautifulSoup对象,将页面源码数据加载到该对象中

page_text =requests.get(url=url,headers=headers).text
Soup=BeautifulSoup(page_text,'lxml')

得到的结果是一个网页的源码数据

343a32ac46fb2e8a4f10ccfa72087f59.png  
3.我们的第一个目标就是先将章节名称和章节相应的内容获取到,由上面的网页源码我们可以看到这些章节内容都在一个<div class="book-mulu">的标签内

li_list=(Soup.select(".book-mulu li"))

建立一个li的列表,放入章节名字和章节内容网址,通过for遍历出来,title为章节名字,detail_url为对应章节的内容网站

4.但是我们发现detail_url的网站地址并不是详细完整的,我们可以点进去看章节网站的地址是长什么样的,与detail_url的地址对4e472a5104048760f310b244e0890f0f.png  
第一章节的detail_url为
ac062f7a9e512cda9a945e0f6a3ecf82.pngac062f7a9e512cda9a945e0f6a3ecf82.png  
少了的部分为网站的前缀,我们可以通过"+"对detail_url进行补充,使其成为一个完整的网站
bs4中的text和get()可以获取标签内容和子标签内容

for li in li_list:    
    title = li.a.text     
    detail_url="http://www.shicimingju.com"+li.a.get('href')

5.完成了章节名称和章节对应网站的抓取之后,我们第二个目标是抓章节里面的内容

我们在前面已经获取了各章节对应的网站detail_url了,接下来我们需要对detail_url发送请求,获取文章内容

detail_page_text = requests.get(detail_url,headers=headers).text

重新再实例化一个soul对象,将详情页的页面源码在加载进来

detail_soup = BeautifulSoup(detail_page_text,'lxml')

同样的分析思路,实例化一个soul对象之后,我们去看网站的源码发现内容都放在一个<div class="chapter_content">的p标签内

c464427c229b17320a9e195e56ecd1e9.png  
利用bs4根据选择器选择指定的内容,定位到div的标签上,返回一个列表,在通过下标和get_text()获取标签下的所有文本内容

desc = detail_soup.select(".chapter_content")[0].get_text()

6.以上就完成了爬取三国演义的小说内容的95%的内容了,最后一步我们要将将数据写入文件中

扫描二维码关注公众号,回复: 10299765 查看本文章
f = open("./sanguo.txt","w",encoding="utf-8")

 注意写入文件要在遍历之前打开文件,否则每次写入都要打开文件

f.write(title+":"+desc+'\n')
import requests
from bs4 import BeautifulSoup

url="http://www.shicimingju.com/book/sanguoyanyi.html"
headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}

page_text = requests.get(url=url,headers=headers).text
Soup = BeautifulSoup(page_text,'lxml')
li_list = (Soup.select(".book-mulu li"))
f = open("./sanguo.txt","w",encoding="utf-8")
for li in li_list:
    title = li.a.text
    detail_url="http://www.shicimingju.com"+li.a.get('href')

    # 向详情页的URL页发送请求,获取文章内容
    detail_page_text= requests.get(url=detail_url,headers=headers).text

    # 数据解析(重新再实例化一个soul对象,将详情页的页面源码在加载进来)
    detail_soup = BeautifulSoup(detail_page_text,'lxml')
    desc = detail_soup.select(".chapter_content")[0].get_text()
    # 写入文件中
    f.write(title+":"+desc+'\n')
爬取诗词名句网站三国演义的章节内容

猜你喜欢

转载自www.cnblogs.com/groundcontrol/p/12596493.html