今天以其中一本小说为例,讲一下下载小说的主体部分,了解正常的爬取步骤,用到的是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. 关于MySQL索引面试题的六连炮!招架的住吗?

    1.面试真题 MySQ索引的原理和数据结构能介绍一下吗? b+树和b-树有什么区别? MySQL聚簇索引和非聚簇索引的区别是什么? 他们分别是如何存储的? 使用MySQL索引都有哪些原则? MySQL ...

  2. 【题解】Luogu P3123 [USACO15OPEN]贝茜说哞Bessie Goes Moo

    Luogu P3123 [USACO15OPEN]贝茜说哞Bessie Goes Moo 题目描述 Farmer John and Bessie the cow love to exchange ma ...

  3. 遇到禁止复制该怎么办?幸好我会Python...

    相信大家都有遇到这种情况(无法复制): 或者是这种情况 以上这种情况都是网页无法复制文本的情况.不过这些对于Python来说都不是问题.今天辰哥就叫你们用Python去解决. 思路:利用pdfkit库 ...

  4. 注册中心ZooKeeper,Eureka,Consul,Nacos对比

    简介 ​ 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者 ...

  5. Message、Handler、Message Queue、Looper 之间的关系

    单线程模型中Message.Handler.Message Queue.Looper之间的关系 1.Message Message即为消息,可以理解为线程间交流的信息.处理数据后台线程需要更新UI,你 ...

  6. js笔记14

    1.作用域面试题 画图分析 2.DOM document object model 节点树状图 document>documentElement>body>tagname 3.我们常 ...

  7. 『心善渊』Selenium3.0基础 — 14、Selenium对单选和多选按钮的操作

    目录 1.页面中的单选按钮和多选按钮 2.判断按钮是否选中is_selected() 3.单选按钮的操作 4.多选按钮的操作 5.选择部分多选按钮的操作 1.页面中的单选按钮和多选按钮 页面中的单选按 ...

  8. Linux中系统时间同步ntpdate简介

    Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步.所 ...

  9. 9、ssh服务详解及优化

    ssh是"secure shell protocol"的简写,在进行数据传输之前,ssh先对练级数据包通过加密技术进行加密处理, 加密后再进行数据的传输,从而确保了数据的安全: s ...

  10. 11、函数(def)

    11.1.函数: 函数即变量 函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系 1.函数格式: def test(x): ''' 2*x+1 :param x:整形数字 :ret ...