1 简介
看到一本小说 《无敌六皇子》 【https://www.xsobiquge.org/book/178299/】看小说简介觉得挺有意思的,想读一读。浏览器阅读 不能保存进度,就好烦。想着就爬下来,本地看。
看着挺简单的网站,requests 就只能爬个目录页,分章内容总是被拒,UA Refer Cookie 以及所有的请求头都加了,也没有效果,最终还是回到浏览器去,此时 DrissionPage 就用上了。
2 DrissionPage
DrissionPage 号称同时实现“写得快”和“跑得快”,试过以后还真是巨方便。
DrissionPage 的教程我就略过不谈了,网上有总结的,感谢哪些前辈们的分享。
我就直接分享一下 具体的爬虫代码吧, 代码量真的很少
demo
from DrissionPage import SessionPage
import os
import time
import random
import re
# 创建页面对象
page = SessionPage()
subpages = []
reg = r"第(\d+)章.*"
pat = re.compile(reg)
def formatTitle(title):
match = pat.search(title)
if match:
idx = match.group(1)
res = title.replace(idx, f'{
idx:0>4}')
return res
return title
def download_catalog(url):
page.get(start_url)
# 根据 xpath 或 css selector 查找
xpath = '//*[@id="list"]/dl/dd'
lists = page.eles(f'xpath:{
xpath}')
for li in lists:
a = li.ele('tag:a')
href = a.attr('href')
title = a.text
title = formatTitle(title)
# print(a.attr('href'), a.text)
subpages.append({
'href': href, 'title': title})
print(f'{
url} 下载完成')
def download_chapter():
for i in range(min_chapters-1, max_chapters):
dic = subpages[i]
time.sleep(random.random() * 2)
ret = page.get(dic['href'])
if not ret:
print(ret)
return
# //*[@id="content"]
xpath = '//*[@id="content"]'
elem = page.ele(f'xpath:{
xpath}')
context = elem.text
with open(f"{
dic['title']}.txt", 'w', encoding='utf-8') as f:
lines = context.splitlines()
for line in lines:
line = line.strip()
if line == '网页版章节内容慢,请下载爱阅小说app阅读最新内容':
break
if line:
f.write('\t'+line+'\n')
print(f'{dic['title']} 下载完成')
if __name__ ==