python爬虫之浏览器下载小说到text中

我们从浏览器看小说的时候总是跳出来一些广告影响我们阅读体验,我们为了解决这些不好的体验,可以爬虫获取我们想要阅读的小说

这个教程采用最简单且操作易上手的爬虫方法,适合小白入门,代码易懂

首先下载安装pycharm或者Visual Studio,在这里就不过多介绍安装过程,如果有需要的可以私信

1、准备工作

我使用的是pycharm这款软件,首先在D盘中添加一个文本文档,然后将文件名改成自己想要的名字,把文本文档的后缀.text改为.py文件,改好之后就是这个图标

2、库的安装

在自己的屏幕界面使用Windows+R的快捷键输入cmd的命令按确定进入命令提示符界面

进入命令提示符界面中输入pip install requests 这一步是配置requests库,在获取小说要使用到的

我出现这个是因为我已经安装过了的requests库和lxml库了,如果安装的很慢,可以使用这个命令

pip install -i http://mirrors.aliyun.com/pypi/simple/ requests(这个是安装requests库的)

安装完成之后我们打开浏览器,按照步骤一步一步的操作

点击获取Microsoft Edge扩展

搜索XPath_helper

点击下载安装之后,点开管理扩展

将这个扩展插件打开

接下来就可以打开我们创建的.py文件开始写代码了。 

3、代码及流程解读

(1)发送请求

import requests
from lxml import etree

(2)我们要考虑发送发给谁,谁是接收者

ur1 = 'https://www.remxiaos.com/dafengdagengren/32230.html'

其中 'https://www.remxiaos.com/dafengdagengren/32230.html'这个网络地址是打开浏览器,选择你要下载的小说内容,进入小说内容之后鼠标右键点击一下,选择检查(这里我以庆余年为例子)

选择网络,然后点击出现的第一个图标像文本一样的,有一个请求URL 复制这个到代码中

(3)伪装自己,把自己伪装成网站上的请求

while True:
    # 伪装自己
    headers = {  # {相当于词典,headers为变量
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'
    }

 其中
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'
    这部部分还是在我们的网络获取往下翻会出现一个User-Agent,复制里面的内容,注意 'User-Agent':这个部分一定要带上,不然就会报错

(4)发送请求

这里需要注意的是看看你网站网络请求方式中的是不是get类型的

  resp = requests.get(ur1, headers=headers)
    resp2 = requests.get(ur1, headers=headers)

 

(5)设置编码

不设置编码的话,把小说内容写入text中是中文会出现乱码

   resp.encoding = 'utf-8'

 (6)响应信息

 print(resp.text)
    e = etree.HTML(resp.text)
    info = '\n'.join(e.xpath('//div/p/text()'))
    title_elements = e.xpath('//div/h1/text()')
    if len(title_elements) > 0:
        title = title_elements[0]
    else:
        title = "No title found"
    href_elements = e.xpath("//div/a[3]/@href")
     

其中 “//div/p/text()”这部分的获取就要用到XPath_helpers插件的扩展了,打开XPath这个插件,ctrl+shift+X的快捷键启用XPath插件(可能会要刷新一下)就会出现这个界面

同时右键单击一下,打开检查,查看元素这一类

其中"//div"网页界面全选

“/p”是选中正文内容

我们这里如果不添加“/text()”的话就会将网络内容写进text中,

要输出标题的时候,我们可以在网络界面标题部分右键点击打开检查就可以看到标题在网页所在的位置了,我们可以看到标题前面有一个<h1就是我们要获取的内容使用“//div/h1/text()”命令

同样,小说我们不可能只看一章,我们需要的是把整部小说下载下来,那就要读取下一章的内容,操作方法是和上面一样的,但是我们上面获取的是文字内容,我们跳转到下一章的时候是网址进入的,所以我们要在后面加入一个@href获取网址

同样的我们在获取小说的时候代码是个死循环,一直在不断的获取下一章内容和写入我们的文本中,那么我们怎么知道它是不是已经获取完了呢,那么我们就直接在目录中点到倒数第二章,把倒数第二章中的下一章网址对它进行if判断,当执行到最后一个网址时就会跳出循环了

if len(href_elements) > 0:
        ur1 = f'https://www.remxiaos.com{href_elements[0]}'
    else:
        ur1 = 'https://www.remxiaos.com/dafengdagengren/default.html'

(7)保存

我们把小说获取了,可以保存到庆余年.text中,不需要我们自己去单独创建一个文本文档了

with open('大奉打更人222.txt', 'a', encoding='utf-8') as f:
        f.write(title + '\n\n' + info + '\n\n')

4、源代码展示

好了上面就是操作的流程了,下面把源代码展示给大家 

import requests
from lxml import etree

ur1 = 'https://www.remxiaos.com/dafengdagengren/32230.html'
while True:
    headers = {  # {相当于词典,headers为变量
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'
    }
    resp = requests.get(ur1, headers=headers)
    resp2 = requests.get(ur1, headers=headers)
    resp.encoding = 'utf-8'
    print(resp.text)
    e = etree.HTML(resp.text)
    info = '\n'.join(e.xpath('//div/p/text()'))
    title_elements = e.xpath('//div/h1/text()')
    if len(title_elements) > 0:
        title = title_elements[0]
    else:
        title = "No title found"
    href_elements = e.xpath("//div/a[3]/@href")
    if len(href_elements) > 0:
        ur1 = f'https://www.remxiaos.com{href_elements[0]}'
    else:
        # 此处可根据具体情况处理,例如给 ur1 赋默认值或跳出循环等
        ur1 = 'https://www.remxiaos.com/dafengdagengren/default.html'
        # 或使用 continue 跳过本次迭代

    print(title)

    with open('大奉打更人222.txt', 'a', encoding='utf-8') as f:
        f.write(title + '\n\n' + info + '\n\n')

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值