呵呵呵175 2022-08-17 20:13 采纳率: 66.7%
浏览 141
已结题

python爬虫爬小说时,爬了一百多张就会报错,从新启动后爬取速度变慢了

python爬虫爬小说时,爬了一百多张就会报错,从新启动后爬取速度变慢了

以下是全部代码

import requests
from lxml import etree
import time
from random import randint as rd

bookpath = r"books/"
bookname = "超级作死宝箱系统3"
bookurl = "http://www.777zw.net/30/30031/"
weburl = "http://www.777zw.net/30/30031/"
user_agent= "Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/561.3 (KHTML, like Gecko) Chrome/21.0.1262.89 Safari/561.3"

headers = {
"Referer": bookurl,
"User-Agent": user_agent,
'Connection': 'close'
}

requests.DEFAULT_RETRIES = 20
s = requests.session()
s.keep_alive = False
def get_urls():
url = bookurl
response = requests.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
html = etree.HTML(response.text)

# 所有章节的url列表

url_list = [weburl + x for x in html.xpath('//li[@class="book-item"]/a/@href')]

print(f'{len(url_list)}')

    return url_list

def get_text(url):
rep = requests.get(url, headers=headers, verify=False)
rep.encoding = 'utf-8'
dom = etree.HTML(rep.text)
# 获取章节名weixin_38616018
name = dom.xpath('//h1[@class="title"]/text()')[0]
#获取章节内小说
text = dom.xpath('//div[@id="content"][@class="content"]/p/text()')
#写入txt文档
with open(bookpath + bookname + '.txt', mode='a', encoding='utf-8') as f:
f.write('\n'+ name + '\n')
for con in text:
f.write(' ' + con + '\n')
print(f'{name} ===> 下载完成')

def main():
urls = get_urls()
for url in urls:
get_text(url)
# 随机时间
c = rd(1000, 3000) / 1000
print(c)
time.sleep(c)

if name == 'main':
main()

基本会报错Max retries exceeded with url,有多次直接停止不动(不报错),加了timeout = 60 后就会报时间过长

尝试过random请求头,效果并不理想。每次重新启动有时能跑起来,有时直接停止不动。

我想要能一次性下载完

  • 写回答

5条回答 默认 最新

查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月17日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错