今天以其中一本小说为例,讲一下下载小说的主体部分,了解正常的爬取步骤,用到的是request和xpath。

爬取数据三步走:访问url --》爬取数据 --》保存数据

一、访问千千小说网址: https://www.qqxsnew.com/

二、随便选一部小说,打开章节目录界面(比方说魔道祖师):https://www.qqxsnew.com/18/18991/

三、开始编写代码。

a. 利用request访问网页,是get请求还是post请求要看网页上面写的是啥

右击检查,选择network,随便找个页面,看下request Method方法是什么。

url = "https://www.qqxsnew.com/18/18991/"
html = requests.get(url, headers=headers).text

b. 得到网页的html页面(html页面 == 在网页鼠标右击“查看网页源代码”),获取章节名字和章节链接。

  章节名字和章节链接获取需要用到XPath --》在网页鼠标右击检查 --》定位到任意章节(如第一章)--》copy --》copy XPath --》 //*[@id="list"]/dl/dd[13]/a

  

  如果安装过XPath插件的话,可以将上面复制的XPath在插件里面查询,可以看到只查询到了一个

  

  我们的目的是获取到所有章节的名字和链接,分析上面XPath的字串,发现dd[13]这个地方是定位,每个dd都是一个章节,所以我们模糊定位看看

  

  咦,可以看出来dd里面的内容都出来了,但是前面12章的内容不是我们需要的,我们要的是从第一章开始,所以需要把它们过滤掉,position是一个定位的函数,大于12是说从第13位开始,也就是第一章

  

  这数据正好是我们想要提取的文字,所以我们已经得到了文字提取的XPath字串://*[@id="list"]/dl/dd[position()>12]/a

  文字和链接都在a标签里面,链接在href属性里面,所以链接的XPath字串://*[@id="list"]/dl/dd[position()>12]/a/@href

  

  好了,前面是在分析XPath字串是怎么得到的,如果自己对XPath语法熟的话,也可以自己写提取字串,然后用插件去验证,或者直接用代码验证都是可以的。现在我们把它放到代码中去

   # 获取a标签对象
chapter_titles_obj = datas.xpath('//*[@id="list"]/dl/dd[position()>12]/a')
for chapter_title_obj in chapter_titles_obj:
# 获取a标签文本
chapter_title_text = chapter_title_obj.xpath('./text()')[0]
# 获取a标签的链接
chapter_url = chapter_title_obj.xpath('./@href')[0]

打印出来看看结果

c. 每个章节的链接都拿到了,接下来就是请求了,这个不多说,和上面请求的方法一样,XPath获取方法也相同。

d. 存储获取到的数据

        for content_chapter_text in content_chapter:
print(content_chapter_text)
with open("魔道祖师/" + chapter_title_text + ".txt", 'a', encoding='utf-8') as f:
f.write(content_chapter_text)

这样,一篇小说从访问到下载的过程就结束了。

完整代码

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File : six-dialog_design -> qianqian.py
@IDE : PyCharm
@Author : zihan
@Date : 2020/5/25 14:50
@Desc :
================================================="""
import requests
from lxml import etree headers = {
'User-Agent': ""
} def main():
url = "https://www.qqxsnew.com/18/18991/"
html = requests.get(url, headers=headers).text
datas = etree.HTML(html)
chapter_titles_obj = datas.xpath('//*[@id="list"]/dl/dd[position()>12]/a')
for chapter_title_obj in chapter_titles_obj:
chapter_title_text = chapter_title_obj.xpath('./text()')[0]
chapter_url = chapter_title_obj.xpath('./@href')[0]
chapter_url = "https://www.qqxsnew.com" + chapter_url # 对每一章的链接发送请求
html_chapter = requests.get(chapter_url, headers=headers).text
datas_chapter = etree.HTML(html_chapter)
content_chapter = datas_chapter.xpath('//*[@id="content"]/text()')
print(chapter_title_text, "开始下载")
for content_chapter_text in content_chapter:
print(content_chapter_text)
with open("魔道祖师/" + chapter_title_text + ".txt", 'a', encoding='utf-8') as f:
f.write(content_chapter_text) if __name__ == '__main__':
main()

OK。如果想要批量下载,或者选择下载等,只是改变url而已,了解主体方法后,这些都不难。

爬取千千小说 -- xpath的更多相关文章

  1. 如何用python爬虫从爬取一章小说到爬取全站小说

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  2. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  3. python之如何爬取一篇小说的第一章内容

    现在网上有很多小说网站,但其实,有一些小说网站是没有自己的资源的,那么这些资源是从哪里来的呢?当然是“偷取”别人的数据咯.现在的问题就是,该怎么去爬取别人的资源呢,这里便从简单的开始,爬取一篇小说的第 ...

  4. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  5. scrapy进阶(CrawlSpider爬虫__爬取整站小说)

    # -*- coding: utf-8 -*- import scrapy,re from scrapy.linkextractors import LinkExtractor from scrapy ...

  6. Python的scrapy之爬取6毛小说网的圣墟

    闲来无事想看个小说,打算下载到电脑上看,找了半天,没找到可以下载的网站,于是就想自己爬取一下小说内容并保存到本地 圣墟 第一章 沙漠中的彼岸花 - 辰东 - 6毛小说网  http://www.6ma ...

  7. 使用scrapy爬取金庸小说目录和章节url

    刚接触使用scrapy的时候,如果一开始就想实现特别复杂的配置,显然是不太现实的,用一些小的例子可以帮助自己理解各个模块. 今天的目标:爬取http://www.luoxia.com/shendiao ...

  8. 网络字体反爬之pyspider爬取起点中文小说

    前几天跟同事聊到最近在看什么小说,想起之前看过一篇文章说的是网络十大水文,就想把起点上的小说信息爬一下,搞点可视化数据看看.这段时间正在看爬虫框架-pyspider,觉得这种网站用框架还是很方便的,所 ...

  9. 使用requests+BeautifulSoup爬取龙族V小说

    这几天想看龙族最新版本,但是搜索半天发现 没有网站提供 下载, 我又只想下载后离线阅读(写代码已经很费眼睛了).无奈只有自己 爬取了. 这里记录一下,以后想看时,直接运行脚本 下载小说. 这里是从   ...

  10. 爬虫入门实例:利用requests库爬取笔趣小说网

    w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/, 爬取<凡人修仙传仙界篇>的所有章节 1.利用requests访问目标网址,使用了get方法 ...

随机推荐

  1. 深入理解Faiss 原理&源码 (一) 编译

    目录 深入理解Faiss 原理&源码 (一) 编译 mac下安装 安装mac xcode工具包 安装 openblas 安装swig 安装libomp 编译faiss 附录 深入理解Faiss ...

  2. 重磅!GitHub官方开源新命令行工具

    近日,GitHub 发布命令列工具 (Beta) 测试版,官方表示,GitHub CLI提供了一种更简单.更无缝的方法来使用Github.这个命令行工具叫做GitHub CLI,别名gh. 现在,你就 ...

  3. docker入门详解

    这可能是最为详细的Docker总结 Docker是什么? 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是十分普遍的,甚至成为了一些企 ...

  4. 【dp】10-15题解 snake vs block

    snake vs block 题目描述 Tgopknight最近迷上了一款叫做Snake vs Block的游戏,他总觉得他自己玩出的不是最优解,但是他忙于享受游戏的乐趣,只好请你帮忙找出最优解. S ...

  5. Linux命令大全之基本命令

    命令提示符中:    ~:表示家目录   #:表示超级用户   $:表示普通用户 命令 [选项] [参数] ls(list):查询目录中的内容 ls  [选项]  [文件或目录] -a:显示所有文件, ...

  6. es6 快速入门 系列 —— promise

    其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...

  7. Java 设置Word文本框中的文字旋转方向

    Word文档中可添加文本框,并设置文本框为横向文本排列或是纵向文本排列,或者设置文本框中的文字旋转方向等.通过Java程序代码,也可以实现以上文本框的操作.下面以Java代码示例展示具体的实现步骤.另 ...

  8. go语言结构体内存对齐

    cpu要想从内存读取数据,需要通过地址总线,把地址传输给内存,内存准备好数据,输出到数据总线,交给cpu,如果地址总线只有8根,那这个地址就只有8位可以表示[0,255]256个地址,因为表示不了更多 ...

  9. Unity_DOTween

    DOTween官网 DG.Tweening.Ease枚举详解 2019.12.12补充: 问题:当前dotween动画没播放完,便再次播放有冲突的操作,如连续多次播放.正播.倒播,导致显示不正常或报错 ...

  10. 什么是DDoS黑洞路由?

    1. 什么是DDoS黑洞路由? DDoS黑洞路由/过滤(有时称为黑孔)是缓解DDoS攻击的一种对策,网络流量将被路由到"黑洞"中并且丢失.如果在没有特定限制条件下实施黑洞过滤,合法 ...