吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9517|回复: 28
收起左侧

[Python 转载] Python Scrapy框架爬虫爬取笔趣阁

  [复制链接]
jinlai1997 发表于 2018-11-2 16:57
本帖最后由 jinlai1997 于 2018-11-2 17:06 编辑

刚学这个框架(其实还不太会用),写个小爬虫,仅供新人练习


没有搞章节排序,其实有个想法(搞完排序之后,爬取速度会更快
    1/检测章节是否是中文数字
    2/如果是中文数字就转换为阿拉伯数字
    3/通过阿拉伯数字进行排序操作
注意:

       1/ 需要在setting中配置延时,如果不配置也可以,框架的异步多线程,
       不添延时可能会造成章节错乱,延时添加为0.2s。0.1s也会错误

         2/需要PIP一些包



[Python] 纯文本查看 复制代码
# 各种引用
import os
import re
import requests
import scrapy
from lxml import etree
# 笔趣阁小说爬取下载


# 爬取目录页面HTML数据
def Get_Context(_PATH, head):
    r = requests.get(_PATH, head)
    r.encoding = 'gb2312'
    se = etree.HTML(r.text)
    return se

# 获取小说地址
def Re_Book_Path():
    book_name = input("请输入您想看的小说名")
    header_dict = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.10 Safari/537.36"}
    bookname = str(book_name).encode("gb2312").hex()
    names = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", bookname.upper())
    name = " " + names
    urls = name.replace(" ","%")
    se = Get_Context("http://www.biquge.com.tw/modules/article/soshu.php?searchkey=+"+urls,header_dict)
    book_path = se.xpath("//*[@id='nr']/td[1]/a[text()='%s']/@href" %book_name)[0]
    return str(book_path)

# 获取各个章节的URL
def Text_Url():
    se = Get_Context(Re_Book_Path(),{'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.10 Safari/537.36"})
    Text_Url = se.xpath("//*[@id='list']/dl/dd/a/@href")
    Text_Urls=[]
    for URLS in Text_Url:
        Text_Urls.append("http://www.biquge.com.tw"+URLS)
    return Text_Urls

class Books(scrapy.Spider):
    name = "Books"     # 爬虫名称
    start_urls = Text_Url()    # 配置爬取URL列表
    def parse(self, response):
        Book_Chapter = response.xpath("//div[@class='bookname']/h1/text()").extract_first()  # 章节名称
        Book_Contents = response.xpath("//div[@id='content']/text()").extract()              # 未处理文本内容
        Book_Name = response.xpath("//div[@class='bookname']//a[3]/text()").extract_first()  # 小说名称
        Save_Path = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + os.path.sep + ".")  # 保存位置设置为保存在当前文件夹下
        texts = "".join(Book_Contents).replace("\r\n", "").replace(" ", "").strip()                  # 处理文本内容

        # 进行保存操作
        with open(Save_Path + "/" + Book_Name + ".txt", "a+") as f:
            f.write(Book_Chapter.strip()+"\r\n"+texts+"\r\n")

免费评分

参与人数 7吾爱币 +6 热心值 +7 收起 理由
WarnSake + 1 + 1 热心回复!
微微雨 + 1 + 1 热心回复!
xianxian + 1 + 1 我很赞同!
风飞星闪 + 1 用心讨论,共获提升!
ka.L + 1 + 1 热心回复!
Believe832 + 1 + 1 我很赞同!
Carbonde + 1 + 1 值得一试啊满满的成就感

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| jinlai1997 发表于 2018-11-22 21:05
风飞星闪 发表于 2018-11-21 18:52
我也刚好写完这个练习,不过用的库不太一样,写的也不如楼主好
bookname = str(book_name).encode("gb231 ...

第一行是为了转一个GB2312码,例如下面是搜索了大主宰之后的URL,可以看见是主页后面添加了一行GB2312码,你把后面的代码用GB2312解码就是大主宰三个字
http://www.biquge.com.tw/modules/article/soshu.php?searchkey=+%B4%F3%D6%F7%D4%D7
那几行代码就是为了弄出来这个GB2312的码
风飞星闪 发表于 2018-11-21 18:52
我也刚好写完这个练习,不过用的库不太一样,写的也不如楼主好
bookname = str(book_name).encode("gb2312").hex()
    names = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", bookname.upper())
    name = " " + names
    urls = name.replace(" ","%")
请教一下这几行代码的目的是什么呢???
jinwentian1995 发表于 2018-11-2 17:18
Carbonde 发表于 2018-11-2 17:23
那种总视频爬取的有吗或者教程,是那种被锁了的要VIP或者付费的。
 楼主| jinlai1997 发表于 2018-11-2 18:51
Carbonde 发表于 2018-11-2 17:23
那种总视频爬取的有吗或者教程,是那种被锁了的要VIP或者付费的。

= =今晚试试,爬视频的…………
teondy 发表于 2018-11-2 19:08
感谢分享 !
q71p 发表于 2018-11-2 20:08
感谢分享  参考一下代码
Right_Hai 发表于 2018-11-3 00:14
爬虫还可以爬取视频?
另外请问一下楼主这个小说网小说要收费么?我考虑整站爬取
 楼主| jinlai1997 发表于 2018-11-3 08:55
Right_Hai 发表于 2018-11-3 00:14
爬虫还可以爬取视频?
另外请问一下楼主这个小说网小说要收费么?我考虑整站爬取

整站可以= =笔趣阁- -不是个盗版网页么,配置好了爬应该没啥问题
其实说是爬视频不如说是把视频的真实链接爬下来
君、临风 发表于 2018-11-3 11:20
感谢分享,紫薯布丁
天才第一步 发表于 2018-11-3 20:11
py3版本吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 20:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表