本帖最后由 Limit-fly 于 2020-3-31 23:21 编辑
最近学习爬虫,发现大部分的都是爬图片的,爬小说的很少,所以我分享一个爬小说的。
当然,爬图片的也有,想要的可以私信我一个小说网站的小说爬取,示例的是晚明这本小说,测试无误。
这个爬取模板适用这个网站的所有小说,只需更换一下对应的小说目录地址即可。
源码均注释了每一步的操作用途,有需要的小伙伴可以自取。
以下为代码部分
[Python] 纯文本查看 复制代码 import requests
import re
from bs4 import BeautifulSoup
from lxml import etree
cookies = {
'__cfduid': 'dd0324475e57064a9b28791ba932b20c41585493290',
'Hm_lvt_3a0ea2f51f8d9b11a51868e48314bf4d': '1585493293',
'Hm_lpvt_3a0ea2f51f8d9b11a51868e48314bf4d': '1585493368',
}
Headers = {
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Referer': 'http://www.xiaoshuo240.cn/cbxs240_rank.html',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
#获取当前session
session = requests.Session()
#头信息放入session中
session.headers.update(Headers)
#解决警告
requests.packages.urllib3.disable_warnings()
#发送请求
response = session.get('http://www.xiaoshuo240.cn/cbxs240/21046/', verify=False)
# print(response)
#获取网页信息
html_doc = BeautifulSoup(response.text,'lxml')
# print(html_doc)
#获取所有的章节list信息
dl_doc = html_doc.find('div',id = 'list')
# 提取章节的url
my_info = re.findall(r'href="(.*?)"',str(dl_doc))
# print(my_info)
url_stl = 'http://www.xiaoshuo240.cn'
#打开文件准备写入小说内容
tx =open('晚明.txt', 'a+', encoding='utf-8')
#遍历整个小说章节url
for page_a in my_info[8:]:
url_page = url_stl+page_a
print(url_page)
#清除警告
requests.packages.urllib3.disable_warnings()
#对章节网页发起请求
response = session.get(url_page,verify=False)
# 获取网页信息
html_doc = etree.HTML(response.text)
#获取div节点中id=content的div对应的文本信息
#获取章节标题
h1_title = html_doc.xpath('string(//h1)')
#标题写入文件
# tx =open('晚明.txt', 'a+', encoding='utf-8')
tx.write(str(h1_title) + '\n\r\n\r')
print(h1_title)
text = html_doc.xpath('string(//div[@id="content"])')
#对文本内容空格进行换行操作
result_txt = str(text).replace(' ', '\n')
print(result_txt)
# 内容写入文件
# with open('晚明.txt', 'a+', encoding='utf-8') as tx:
tx.write(result_txt+'\n\r\n\r')
tx.close() |