赞
踩
import requests from lxml import etree url = 'https://www.xswang.vip/book/59716/' res = requests.get(url) list_page = etree.HTML(res.text) txt_name =list_page.xpath("//h1/text()")[0].strip() file_name = txt_name + '.txt' list_a = list_page.xpath("//dd/a//@href")[12:] list_a = ['https://www.xswang.vip' + i for i in list_a] for i in list_a: res = requests.get(i) data_page = etree.HTML(res.text) data_title = data_page.xpath("//*[@id='main']/div/div/div[2]/h1/text()")[0] data_list = data_page.xpath("//*[@id='content']/p/text()") data = "\n".join(data_list) this_chapter = f"\n{data_title}\n{data}" with open(file_name, 'a', encoding='utf-8') as f: f.write(this_chapter) print(f"{data_title} 下载完成")
以上为代码全图
import requests
from lxml import etree
url = 'https://www.xswang.vip/book/59716/'
res = requests.get(url)
list_page = etree.HTML(res.text)
txt_name =list_page.xpath("//h1/text()")[0].strip()
strip()防止出现空格
list_a = list_page.xpath("//dd/a//@href")
//:是用来选择XML或者HTML中所有的节点,它后面可以跟任何节点,不用考虑层级关系,例如本篇中//dd表示选择文档中所有的dd元素
/:是用来选择当前节点的子节点,例如//dd/a表示为选择dd元素中所有的直接子集a元素
list_a = ['https://www.xswang.vip' + i for i in list_a]
data_title = data_page.xpath("//*[@id='main']/div/div/div[2]/h1/text()")[0]
data_list = data_page.xpath("//*[@id='content']/p/text()")
data = "\n".join(data_list)
this_chapter = f"\n{data_title}\n{data}"
定位获取把标题和内容,并将获取到的内容与标题拼接在一起
file_name = txt_name + '.txt'
with open(file_name, 'a', encoding='utf-8') as f:
f.write(this_chapter)
用追加输入的方式将每次获取到的标题和内容保存到以file_name命名的txt文件中(file_name是获取到的书名)
这种方式相比第一种方式更加快捷,不需要去找地址结尾数字的规律来遍历,只需要在主网页上定位各个章节的链接元素,依次遍历就可以将整本书给爬取出来。
由于方法一已经详细解释了各个代码的作用,因此方法二就没有过多赘述,望多多包涵!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。