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

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 Java新项目启动报错
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了
  • ¥15 Sharepoint JS开发 付费技术指导
  • ¥15 输入程序运行仿真后,烟雾值不实时检测,变成固定值
  • ¥20 数据排序,可选择排序方向
  • ¥15 修改一下代码,考虑进程到达时间不同的情况
  • ¥15 帮我看看这是个啥题,带解题过程和结果,条件如下FCF = 290471.33 g1 = 15% r = 8% g2 = 4% n = 5
  • ¥15 edem模拟颗粒不显示或者生成失败
  • ¥15 Python代码编写