参考文章:
https://blog.youkuaiyun.com/benbird1969/article/details/80623013
#爬取特定章节的正文
# -*- coding:UTF-8 -*-
import requests
from bs4 import BeautifulSoup
#if __name__ == '__main__':
#设置目标网页 晋江文学城
target = 'http://www.jjwxc.net/onebook.php?novelid=3325239&chapterid=1'
#得到网页内容
req = requests.get(url=target)
#设置编码方式,本来是显示的乱码,结果发现编码方式不是utf-8,而是gbk,注意是encoding不是coding
req.encoding = 'gbk'
#提取text文本,因为我们需要的是小说内容
html = req.text
#解析网页,本来是'lxml'但是解析出来是乱码,因此查了之后换成html5lib之后可以正常解析了
bf = BeautifulSoup(html,'html5lib')
#找到所有标签是div的class是noveltext的标签下的内容,由于在python中class是关键词,因此加一个_
texts = bf.find_all('div', class_="noveltext")
print(texts[0].text)
关于晋江的爬虫,目前没有好的方法能够排版成笔趣看那样。。。。。。
#爬取特定文章的所有章节目录
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
#设置目标网址,笔趣看
target = 'https://www.biqukan.com/1_1094/'
#爬取目标网址
req = requests.get(url=target)
#设置编码方式
req.encoding = 'gbk'
#提取text
html = req.text
div_bf = BeautifulSoup(html,'html5lib')
#标签去原网页的审查元素里面找
div = div_bf.find_all('div', class_ = 'listmain')
#将八个空格换成回车,每一段顶格写
#html中\xa0表示空格
print(div[0].text.replace('\xa0'*8,'\n\n'))
但是有一个问题,在去掉<\br>的过程中,为什么直接将空格换成分段就行了,而不是将<\br>换成别的。试了以下代码,不行。
print(div[0].text.replace('<br/>','').replace('\xa0'*8,'\n\n'))
以下代码说明可以将
去掉,但是每一段空格没办法去掉。
print(div[0].text.replace('<br/>','\n\n'))
#获取笔趣看特定小说的所有章节名称和网址
from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':
server = 'http://www.biqukan.com/'
target = 'https://www.biqukan.com/1_1094/'
req = requests.get(url=target)
req.encoding='gbk'
html = req.text
div_bs4 = BeautifulSoup(html,'html5lib')
div = div_bs4.find_all('div',class_='listmain')
a_bf = BeautifulSoup(str(div),'html5lib')
a = a_bf.find_all('a')
for each in a:
print(each.string, server + each.get('href'))
- 主要点:
设置目标网站→requests获取网页→设置编码方式→得到text→BeatifulSoup解析网页→获取特定标签下的内容(find_all)→使用a.string获取章节名*→获取a标签的href属性(get)
*: text和string都是bs4类型对象的一个属性,具体见此文章。