TzzFly 发表于 2019-1-30 14:25

小说爬虫

本帖最后由 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),"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.text.replace('\xa0'*8,'\n\n')         这里的text主要是去除<br/>标签 replace是删除空格
接着写入文本
然后放到一块:lol整理一下,一个简单的爬虫就做好了我代码写得并不好看,你们要是觉得哪里不python了告诉我
很乐意接受建议   (看小说当然是手机好用了,所以可以下载一个termux,然后安装个python,挂个软链接到某文件夹)
# -*- coding: utf-8 -*-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),"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.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)
      dl.writer(dl.names, name +'.txt', dl.reorganize(dl.urls))      
    print(name +'下载完成')

liangbigsun 发表于 2019-1-30 14:48

欢迎分析讨论交流,吾爱破解论坛有你更精彩!

君君啊 发表于 2019-1-30 15:24

逆天邪神

#history 发表于 2019-1-30 15:27

看不懂,小白一个...

410791007 发表于 2019-1-30 15:39

求大神教下这类爬虫代码具体要怎么使用?好多爬虫代码真的有用,可惜我是真小白,不会用。

18311861765 发表于 2019-1-30 15:51

你让我们伸手党怎么办

依旧沉沉 发表于 2019-1-30 16:06

能教教我python不,厚脸皮问一下:$qqq

rxxcy 发表于 2019-1-30 16:18

你们的手机是真的牛逼,什么都能做

TzzFly 发表于 2019-1-30 17:40

rxxcy 发表于 2019-1-30 16:18
你们的手机是真的牛逼,什么都能做

手机当然是用来折腾了,越折腾越开心
页: [1]
查看完整版本: 小说爬虫