这里用到Pycharm.Professional 版本运行
python3.7
用到的库:requestst,xlml
这次爬小说用到的是简单单线程爬取技术,用request库通过给定的url地址获取网页内容
首先,逐章爬取小说,要分开章节标题和章节里正文内容方便整合出来的小说可以按章阅读。
然后,因为爬取的是小网站没有反爬虫机制就不用伪装头部(下面代码是伪装头部的代码,可以不写)
#模拟请求头
#此处代码伪装chrome浏览器模拟人的行为浏览网页
headers = { "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" }
运行时遇到数组溢出的提示,在get_text(url)
with open(path + title[0], \'w\', encoding=\'utf-8\') as f:
我的显示这两行有错误:
IndexError: list index out of range
卡住,我不知道为什么找遍网站都说没有章节名称,建议直接换个网站爬
import requests from lxml import etree #获取小说想要爬取的urls urls = [\'https://www.bookbaob.com/views/201011/18/id_XMTM3MTg5_{}.html\'.format(i) for i in range(1, 55)] #设置保存小说路径 path = r\'D:\python\pythonexercise\xiaoshuo\ \' #获取小说内容 def get_text(url): r = requests.get(url) r.encoding = \'utf-8\' selector = etree.HTML(r.text) #获取文章标题 title = selector.xpath(\'//*[@id="amain"]/dl/dd[1]/h1/text()\') #获取小说正文内容 text = selector.xpath(\'//*[@id="contents"]/text()\') with open(path + title[0], \'w\', encoding=\'utf-8\') as f: for i in text: f.write(i) if __name__ == "__main__": for url in urls: get_text(url)
小说成功爬取下来了,之后用窗口命令整合文件即可
首先新建一个记事本,在其中写入:type *.txt>>all.txt。然后保存为合并.bat(也就是批处理文件)。放到你的txt所在的文件夹内,双击就会出现合并好的all.txt文件
完成爬取,可以愉快的看小说了。