johnnyb 发表于 2020-7-15 16:00:30

request+bs4+lxml思路 小说爬取. 每一步都有注释. 适合新手学习

本帖最后由 johnnyb 于 2020-7-15 16:23 编辑

理论上,只要替换url 和 写入的txt文件名. 即可爬其他任何小说. 具体没测试.
import requests
from bs4 import BeautifulSoup
import os


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'

html_text = requests.get(url=url, headers=headers).text# 获取目录
soup = BeautifulSoup(html_text, 'lxml')# lxml解析
li_list = soup.select('.book-mulu > ul > li')# 选择标签
if not os.path.exists('./三国演义'):# 创建文件夹
    os.mkdir('./三国演义')
f = open('./三国演义/sanguo.txt', 'w', encoding='utf-8')# 创建文件
for li in li_list:# 遍历所有的li标签.里面包含有连接和标题
    title = li.a.string# 该章节标题
    info_url = 'http://www.shicimingju.com'+li.a['href']# 取到该章节的连接,并进行完善
    info_text = requests.get(info_url, headers=headers).text# 有了连接,就可以请求对应章节的text
    info_soup = BeautifulSoup(info_text, 'lxml')# 还是lxml解析
    div_tag = info_soup.find('div', class_='chapter_content')# 定位内容部分标签.
    data_text = div_tag.get_text()# 获取正文部分
    f.write(title+data_text+'\n')# 写入标题加对应正文.换行符隔开
    print(title,'爬取写入完成.')

print('Over All')
结果预览画面!请多指教.

johnnyb 发表于 2020-7-15 16:19:51

liuzhengyuan 发表于 2020-7-15 16:03
你没用 lxml

为何么说呢?

liuzhengyuan 发表于 2020-7-15 17:38:21

本帖最后由 liuzhengyuan 于 2020-7-15 17:40 编辑

johnnyb 发表于 2020-7-15 16:19
为何么说呢?

不好意思,我看错了……(怪我眼瞎,没看到{:10_266:} )

johnnyb 发表于 2020-7-16 14:49:38

liuzhengyuan 发表于 2020-7-15 17:38
不好意思,我看错了……(怪我眼瞎,没看到 )

{:10_250:}
页: [1]
查看完整版本: request+bs4+lxml思路 小说爬取. 每一步都有注释. 适合新手学习