my canteen
登录       注册

您现在的位置是:网站首页 > 学无止境

每日一技之爬取小说

王伟2020年4月13日1424人围观
简介利用bs4和requests爬取小说内容

爬取小说

- 代码实现(可以跳转到代码)

在我的requests模块的使用中已经简单介绍了开发者工具的使用,并且我会将未接触到的开发者工具使用填充到本文章

chorme开发工具和requests的简单实用

话不多说直接开整

爬取小说爱你的那十年全篇内容:http://www.bequgew.com/53408/点击进入网址

首先我们打开开发者工具 很容易的看出这个页面并不是一个动态加载页面

我们可以利用开发者工具定位功能对标签进行定位,我们可以看出我们想要的内容就在a链接的那个地址中

我们点击进入文章详情页,这时定位文章的内容

整体思路就是我们需要请求一次小说首页地址获取各个a标签下的章节地址,然后通过章节地址获取我们需要的文章内容

代码实现

import os 
os.mkdir("./爱你的那十年") #在当前目录下创建文件夹
import requests 
import bs4 # 大家可以点击下方链接 bs4.BeautifulSoup 简单熟悉一下这个方法
#lxml是帮助我们解析HTML、XML文件,快速定位,搜索、获取特定内容的Python库。我们知道,对于纯文本的HTML文件的查找可以使用正则表达式、BeautifulSoup等完成。lxml也是对网页内容解析的一个库。
import lxml  # lxml一个很强的解析器 
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"
}
# 小说首页地址
main_url = "http://www.bequgew.com/53408/"
response = requests.get(url=main_url, headers=headers)
# 网页原始出现乱码 更改编码格式
response.encoding= "utf-8"
soup  = bs4.BeautifulSoup(response.text,"lxml")
# bs4 中层级选择器定位到article_texttitleb > ul > li > a的所有a标签 并返回一个<class 'bs4.element.Tag'>对象的列表
a_list = soup.select('.article_texttitleb > ul > li > a')
for a in a_list:
    title = a.string # 取出a标签下的文本
    # 对文章详情页地址拼接
    detail_url = "http://www.bequgew.com"+a['href']
    response = requests.get(url=detail_url,headers=headers)
    # 更改编码格式
    response.encoding= "utf-8"
    # 使用lxml作为解析器
    soup = bs4.BeautifulSoup(response.text,'lxml') 
    div_tag = soup.find("div", id="book_text")
    content = div_tag.text
    with open ("./爱你的那十年/第{}章".format(a_list.index(a)+1),"w",encoding="utf-8") as fp:
        fp.write(content)
        print("第{}章下载成功".format(a_list.index(a)+1))
        fp.close() 

执行界面

下载章节

详细内容

这样我们的代码就已经实现了,是不是很简单呢?

bs4基本用法看这个应该就够用了,详细内容可查阅官方文档,中英文全有。

bs4简单用法

相比于bs4,我个人更喜欢使用xpath,大家有兴趣可以下载一个xpath谷歌插件

链接:https://pan.baidu.com/s/1GXPm1kMENXhOkefKcEQnlA 密码: 8wwv

路漫漫其修远兮,吾将上下而求索。


文章评论

来说句话吧.... 共有评论数:0条


微信二维码 博主微信 qq二维码 博主QQ
177****8743
7*24小时电话