Python爬虫实战:使用Requests和Lxml库下载小说

本教程将教你如何使用Python的Requests和Lxml库,编写爬虫程序自动下载小说。代码清晰易懂,适合初学者学习。

安装必要的库

首先,你需要安装Requests和Lxml库。你可以使用以下命令进行安装:

pip install requests
pip install lxml

代码示例

import requests
from lxml import etree

url = input('请输入小说目录链接:')
re = requests.get(url)
re.encoding = 'utf-8'
selector = etree.HTML(re.text)

book_name = selector.xpath('//div[@class='bookname']/h1/text()')[0]
print(f'{book_name}开始下载')

chapter_urls = selector.xpath('//div[@id='list']//a/@href')
chapter_names = selector.xpath('//div[@id='list']//a/text()')

for i in range(len(chapter_urls)):
    chapter_url = url + chapter_urls[i]
    chapter_name = chapter_names[i]

    re1 = requests.get(chapter_url)
    re1.encoding = 'utf-8'
    selector1 = etree.HTML(re1.text)
    content = selector1.xpath('//div[@id='content']/text()')

    with open(f'{book_name}.txt', 'a', encoding='utf-8') as f:
        f.write(f'{chapter_name}
')
        for c in content:
            f.write(c.strip())
            f.write('\n')

    print(f'{chapter_name}下载完成')

print(f'{book_name}下载完成')

代码解析

  1. 导入必要的库:requests 用于发送 HTTP 请求,lxml 用于解析 HTML 内容。
  2. 获取小说目录链接:使用 input() 函数让用户输入小说目录链接。
  3. 发送 HTTP 请求:使用 requests.get() 函数发送 GET 请求,获取小说目录页面的 HTML 代码。
  4. 解析 HTML 代码:使用 etree.HTML() 函数将 HTML 代码解析成一个 etree 对象,方便我们使用 XPath 语法提取数据。
  5. 获取小说名称:使用 selector.xpath('//div[@class='bookname']/h1/text()')[0] 获取小说名称。
  6. 获取所有章节的链接和名称:使用 selector.xpath('//div[@id='list']//a/@href')selector.xpath('//div[@id='list']//a/text()') 获取所有章节的链接和名称。
  7. 循环遍历所有章节:使用 for 循环遍历所有章节的链接和名称。
  8. 获取章节内容:使用 requests.get() 函数获取章节内容的 HTML 代码,使用 etree.HTML() 函数解析 HTML 代码,使用 selector1.xpath('//div[@id='content']/text()') 获取章节内容。
  9. 保存章节内容:使用 with open(...) as f 打开一个文件,使用 f.write() 函数将章节名称和内容写入文件。
  10. 打印下载进度:使用 print() 函数打印下载进度。

注意事项

  1. 请确保你所爬取的网站允许爬取,并遵守其 robots.txt 文件的规则。
  2. 请不要过度频繁地爬取网站,以免给网站服务器带来压力。
  3. 爬取过程中可能会遇到各种错误,例如网络错误、解析错误等,你需要根据实际情况进行处理。

总结

本教程教会了你如何使用 Python 的 Requests 和 Lxml 库编写简单的爬虫程序,自动下载小说。希望对你有所帮助!

Python爬虫实战:使用Requests和Lxml库下载小说

原文地址: https://www.cveoy.top/t/topic/ojN3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录