python爬虫小说
本帖最后由 D.A. 于 2020-6-17 22:34 编辑爬虫初学者第一个完整的爬虫代码,爬取了旧时光文学网的小说,由于初学代码都比较简单易懂。
得益于楼中网友的交流指点,将代码完善了。直接输入小说名称即可实现搜索。
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
import urllib
#设置headers
ua = UserAgent()
headers = {
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
'Connection':'close',
"User-Agent": ua.random
}
#获取url链接的xml格式
def getxml(url):
res = requests.get(url, headers, timeout = 30)
res.encoding = res.apparent_encoding
text = res.text
xml = etree.HTML(text)
return xml
#获取文章内容
def getcontent(xml):
data = xml.xpath('//div[@class="readcontent"]/text()')
for text in data:
if text =='\n':
pass
else:
f.write(text.replace('\n',''))
#获取整本小说
def getbook(url):
# 获取小说全部章节及链接
xmllist = getxml(url)
name = xmllist.xpath('//h1/text()')
chapters = xmllist.xpath('//div[@id="list-chapterAll"]//dd/a/text()')
links = xmllist.xpath('//div[@id="list-chapterAll"]//dd/a/@href')
print('《' + name + '》' + '已获取,共' + str(len(links)) + '章\n')
# 进入小说章节页,爬取章节内容,并存入txt文档中
f.write(name+'\n\n\n')
for i in range(0, 2):
f.write('\n'+ chapters +'\n')
urltxt = 'https://www.oldtimescc.cc/go/42472/' + links
xmlcont = getxml(urltxt)
page = xmlcont.xpath('//div[@class="book read"]//small/text()')
getcontent(xmlcont)
if '(1/2)' in page:
urltxt2 = urltxt + '_2.html'
xmlcont2 = getxml(urltxt2)
getcontent(xmlcont2)
print(chapters + ': 已完成')
f.close()
searchname = input('请输入小说名:')
f = open('E:/'+searchname+'.txt', 'w', encoding='utf-8')
search = urllib.parse.quote(searchname.encode('gbk'))
searchurl = 'https://www.oldtimescc.cc/modules/article/search.php?searchkey='+search
print(searchname + '正在搜索中......')
searchxml = getxml(searchurl)
try:
bookname = searchxml.xpath('//div[@class="bookinfo"]/h1/text()')
getbook(searchurl)
print('下载完成,已保存在E盘根目录中!')
except:
print('未查找到'+searchname+',请重试!') 如果楼主想改进下脚本的话提下修改意见
1. searchkey也可以搜索作者名字,然后抓取所有该作者下的小说,最后整合成class,加点user input 什么的,弄个菜单,terminal直接就可以调用,类似windows cmd直接运行。
2.搜集更多类似小说网站,输入一个名字就可以提供更多下载渠道
3.多线程下载e.g. pool
4. 大概一个盗版小说框架就搭载完了
{:301_1001:} 本帖最后由 wilison1992 于 2020-6-17 01:14 编辑
D.A. 发表于 2020-6-16 09:03
好的,fiddler还不太会,有空再学习学习
我看了,这个小说网上的搜索名字是加密过的。
import urllib
a = '杀马特'
urllib.parse.quote(a.encode('gbk'))
##'%C9%B1%C2%ED%CC%D8' 感谢分享 输入关键词后网站不变,这是怎么回事?好多网站都这样,坐等打脸 感谢分享 有些网站检验cookie,建议加cookie.
另外爬虫只能爬虫到有权限阅读的东西,如果vip权限限制,还是建议用charles/fiddler 修改 关于“无法通过在代码中输入小说名直接获取小说”,一点小思路仅供参考,楼主有时间可以尝试下。先爬取所有小说名和对应的url生成一个字典,后面就可以直接通过小说名找到对应的url,然后下载指定小说 明明很皮 发表于 2020-6-16 08:20
关于“无法通过在代码中输入小说名直接获取小说”,一点小思路仅供参考,楼主有时间可以尝试下。先爬取所有 ...
之前也想过,可是也没找到方法{:1_907:}
有空我试试看fiddler行不行 wilison1992 发表于 2020-6-16 07:32
有些网站检验cookie,建议加cookie.
另外爬虫只能爬虫到有权限阅读的东西,如果vip权限限制,还是建议 ...
好的,fiddler还不太会,有空再学习学习 随遇而安8 发表于 2020-6-15 23:08
输入关键词后网站不变,这是怎么回事?好多网站都这样,坐等打脸
应该也是反爬设置吧,提高爬取难度 随遇而安8 发表于 2020-6-15 23:08
输入关键词后网站不变,这是怎么回事?好多网站都这样,坐等打脸
你研究一下用searchkey加书名传递参数应该就能解决
页:
[1]
2