爬虫新手入门(二):爬取一本言情小说的内容

找了当时正在看的一本小说(《嫁给男主他爸爸》)的开始了处理。
这本小说当时还是晋江首页的热门推荐,虽然名字很一言难尽。
本来想爬晋江,但是没成功,改成了“看毛线小说网”里面的这本小说。
代码参考:

https://blog.csdn.net/c406495762/article/details/78123502

在这个基础上改动了。

一、网页分析

要爬的网址是:

https://www.kanmaoxian.com/51/51495/9432900.html

在这里插入图片描述
要爬的,就是里面的这些黑色文字。
按F12(Chrome)看下这些文字都在哪里。
在这里插入图片描述
如图所示,标题在h2标签,文字在class为“yd_text2”的div里面。

打开下源码
在这里插入图片描述
编码语言是GBK(而不是UTF-8!)
GBK编码专门用来解决中文编码的,是双字节的。
UTF-8 编码是用以解决国际上字符的一种多字节编码。
所以这种中文小说网站好多都是GBK。
在这里插入图片描述
点开整个小说页面,发现目录跳转是在class为ml_main的section里面的dl标签的dd标签。

二、代码书写

先发起请求

import requests
if __name__ == '__main__':
    target = 'https://www.kanmaoxian.com/51/51495/9432900.html'
    req = requests.get(url=target)
    req.encoding = 'GBK'
    print(req.text)

结果如下:
在这里插入图片描述
然后来处理文本
需要提取class为yd_text2的div的文字

import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
    target = 'https://www.kanmaoxian.com/51/51495/9432900.html'
    req = requests.get(url=target)
    req.encoding = 'GBK'
    html = req.text
    bf = BeautifulSoup(html,’lxml’)
    texts = bf.find_all('div', class_='yd_text2')
    print(texts)

注意一些细节

 texts = bf.find_all('div', class_='yd_text2')

是class_。在python中class是关键字,加下划线标识区分。
结果:
在这里插入图片描述
还剩下一些空格和br标签要处理。

import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
    target = 'https://www.kanmaoxian.com/51/51495/9432900.html'
    req = requests.get(url=target)
    req.encoding = 'GBK'
    html = req.text
    bf = BeautifulSoup(html)
    texts = bf.find_all('div', class_='yd_text2')
    print(texts[0].text.replace('\xa0'*8,'\n\n'))

replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
xa0对应html中的&nbsp,8个空格替换为2个\n(换行)
也可以是(’
’,’\n\n’)),加\n是去掉换行

然后按照网页爬取全文,不知道为啥没成功,一直报错
先写在这里,以后学得更多了来改写:

import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
    target = 'https://www.kanmaoxian.com/51/51495/9432900.html'
    req = requests.get(url=target)
    req.encoding = 'GBK'
    html = req.text
    section_bf = BeautifulSoup(html,'lxml') #添加了解释其lxml
    section = section_bf.find_all('section', class_='ml_main')
    print(section[0])

报错:IndexError: list index out of range

版权声明:本文为weixin_43552965原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43552965/article/details/102502715