好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 TzzFly 于 2019-1-30 15:10 编辑
今天下雨了在家没事干,突然想看小说了,就把以前写的一个爬虫拿出来改了一下还搞他 http://www.biquyun.com 毕竟好搞嘛
利用抓包工具抓包,发现使用它的搜索功能是对url进行了编码,搜索发出的请求是 "http://www.biquyun.com/modules/article/soshu.php?searchkey=+"要搜索的内容的gb2312编码
比如我要搜索“逆天邪神”它的请求地址是“http://www.biquyun.com/modules/article/soshu.php?searchkey=+%C4%E6%CC%EC%D0%B0%C9%F1”
通过from urllib.request import quote quote(name,encoding = "gbk")可实现对编码
先用requests模块发个get请求发现 response乱码, html = response.text.encode('iso-8859-1').decode('gbk') 文本是中文的时候,获取的数据是iso8859-1编码的,进行数据操作时会出现乱码。
然后把获取到的内容处理一下 我是直接把它复制到一个字符串里边 然后测试一下 就简单的用 a ,b 什么的表示了
soup = BeautifulSoup(a,"lxml")
a = soup.find_all('div',id="list")
soup = BeautifulSoup(str(a[0]),"lxml")
b = soup.find_all("a") 这时候输出是这样的 <a href="/4_4027/2348399.html">第8章 大婚之夜</a>
for a in b:
print (a.string,'http://www.biquyun.com/'+a.get("href")) 利用使用a.get("href")方法获取herf 的属性值,a.string获取章节名称
然后开始获取内容 随便找一章把内容抓下来测试 还是 a ,b 别嫌弃
soup = BeautifulSoup(a,"lxml")
a = soup.find_all('div',id="content") 内容都在这里 然后
a[0].text.replace('\xa0'*8,'\n\n') 这里的text主要是去除<br/>标签 replace是删除空格
接着写入文本
然后放到一块整理一下,一个简单的爬虫就做好了 我代码写得并不好看,你们要是觉得哪里不python了告诉我
很乐意接受建议 (看小说当然是手机好用了,所以可以下载一个termux,然后安装个python,挂个软链接到某文件夹)
[Python] 纯文本查看 复制代码 # -*- coding: utf-8 -*-[/size][/font][/color][/color][/size][/font]import requests
from bs4 import BeautifulSoup
from urllib.request import quote
class downloader(object):
def __init__(self):
self.names = [] #存放章节名
self.urls = [] #存放章节链接
self.nums = 0 #章节数
def url_gbk(self,name):
url1 = "http://www.biquyun.com/modules/article/soshu.php?searchkey=+"
url = url1 + quote(name,encoding = "gbk")
return url
def html(self,url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0'}
response = requests.get(url,headers = headers)
html = response.text.encode('iso-8859-1').decode('gbk')
soup = BeautifulSoup(html,"lxml")
a = soup.find_all('div',id="list")
soup = BeautifulSoup(str(a[0]),"lxml")
b = soup.find_all("a")
self.nums = len(b)
for a in b:
self.names.append(a.string)
self.urls.append('http://www.biquyun.com/'+a.get("href"))
def reorganize(self, target):
r = requests.get(url = target)
a = r.text
soup = BeautifulSoup(a,"lxml")
text = soup.find_all('div',id="content")
texts = text[0].text.replace('\xa0'*8,'\n\n')
return texts
def writer(self, name, path, text):
write_flag = True
with open(path, 'a', encoding='utf8') as f:
f.write(name + '\n')
f.writelines(text)
f.write('\n\n')
if __name__ == "__main__":
name = input("小说名称:")
dl = downloader()
url = dl.url_gbk(name)
dl.html(url)
print(name +'开始下载:')
for i in range(dl.nums):
print(dl.names[i])
dl.writer(dl.names[i], name +'.txt', dl.reorganize(dl.urls[i]))
print(name +'下载完成')
|
-
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|