执念i_ 发表于 2018-8-9 18:32

小白学爬虫之pyquery爬取小说站

本帖最后由 执念i_ 于 2018-8-9 19:07 编辑

这次爬小说站笔趣阁各大分类里的小说:www.biqutxt.com
大概能把这个站一大半爬下来
交代环境:Python3.6,pyquery
分析网页:
发现网页分类的url是 '首页地址' + '分类全拼'
eg:http://www.biqutxt.com/xuanhuanxiaoshuo/
然后大分类下的文章列表很简单
发现每页只有30本书
每页的url是 '首页地址' + '分类全拼' + '分类序号' + '_' + '页码' + '.html'
eg:http://www.biqutxt.com/xuanhuanxiaoshuo/1_1.html

爬取思路:

1.请求大分类,比如玄幻小说救赎:请求 http://www.biqutxt.com/xuanhuanxiaoshuo
2.获取大分类下小说列表的总页码
3.请求每一页的链接,获取每一页每本书的链接
4.请求每本书的链接,然后获取每一章的详细信息和书本简介
5.剔除不需要的信息,12条最新章节的信息
6.保存为TXT文件

代码太长了,这里贴一部分的,完整源码在下面有下载:
from pyquery import PyQuery as pq
import requests
from requests.exceptions import RequestException
import os
import multiprocessing

def get_index_fenlei(urls):# 获取网页内容
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/67.0.3396.99 Safari/537.36'
    }
    try:
      html = requests.get(url=urls, headers=headers)
      if html.status_code == 200:
            return html.content.decode('gbk')
      return None
    except RequestException:
      return None

def parse_one_page(html, page_1, url, classification):# 解析类别转换为pyquery对象
    doc = pq(html)
    pages = doc('#pagelink .last').text()# 获取总页码数
    print("此分类共有 :", pages, '页')
    list = []# 创建列表存放页码链接
    for page_2 in range(int(pages)):# 总页码循环获取每一页的链接
      page_2 = page_2 + 1
      page_url = url + str(page_1) + '_' + str(page_2) +'.html'#拼接页码链接
      # print(page_url)
      list.append(page_url)
    print('页码链接获取成功-------------')
    yemashu = 1
    for book in list:# 遍历页码列表
      print('正在请求第---', str(yemashu), '---页')
      html = get_page_bookurl(book)# 请求每一页
      pare_page_bookurl(html, classification)# 获取每一页书的链接信息
      yemashu = yemashu + 1

def get_page_bookurl(bookurl):# 解析页码网页转换为pyquery对象,获取每本书的链接
    url = bookurl
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/67.0.3396.99 Safari/537.36'
    }
    try:
      html = requests.get(url=url, headers=headers)
      if html.status_code == 200:
            print('请求本页成功')
            return html.content.decode('gbk')
      return None
    except RequestException:
      return None


小白学习作品,请各位大佬多多指教

源码下载:https://www.lanzouj.com/i1lyqah
评分免费免费免费{:1_919:}

执念i_ 发表于 2019-8-23 22:12

sushao 发表于 2019-8-18 17:12
大佬大佬!!!!我翻了很多人的代码你是唯一一个最好的,能完整下载的,求优化大佬!最好的是各章单个文件 ...

储存的名字改一下就行了呀

sushao 发表于 2019-8-18 17:12

大佬大佬!!!!我翻了很多人的代码你是唯一一个最好的,能完整下载的,求优化大佬!最好的是各章单个文件名字是章节名称最好不知道大佬是否可以实现!!!

执念i_ 发表于 2018-8-9 18:48

代码好几把长,求大佬指导优化{:1_919:}

老M 发表于 2018-8-9 19:16

路过看看哈哈哈哈啊

书枕有梦 发表于 2018-8-9 19:50

学习了,学习了

MarinYY 发表于 2018-8-9 20:24

路过看看哈哈哈哈啊

591888122 发表于 2018-8-9 20:32

学习了大佬{:1_893:}

笨笨猪 发表于 2018-8-9 21:52

代码很规范啊,headers可以设成全局变量,包括list那个参数建议修改。

demon_lin 发表于 2018-8-10 00:35

路过观摩观摩

陈家丶妖孽 发表于 2018-8-10 11:44

也在练习爬虫,看看你的案例拿来练习一下~

a826472071 发表于 2018-8-10 12:11

路过看看
页: [1] 2 3
查看完整版本: 小白学爬虫之pyquery爬取小说站