gpt4 book ai didi

python - scrapy蜘蛛: output in chronological order

转载 作者:行者123 更新时间:2023-12-01 02:26:30 25 4
gpt4 key购买 nike

我正在使用 Scrapy 用 python 编写一个网络爬虫。目的是按照预定的时间间隔监视网页的更改。登录网站后,蜘蛛每隔 X 分钟请求一个网页,并从页面中提取某些数据并将其保存到文本文件中。事实证明,文本文件仅在蜘蛛关闭时才写入,并且文本文件中的行不是按时间顺序排列的。我不明白发生了什么事。也许这是 Scrapy 模块的特定工作方式?有什么想法吗?

import scrapy
from scrapy.http import Request
from scrapy.http import FormRequest
from scraping_example.loginform import fill_login_form
from datetime import datetime
import time


class ExampleSpiderSpider(scrapy.Spider):
name = 'example_spider'
allowed_domains = ['example.com']
start_urls = ['http:/www.example.com/login']
login_user = 'edging780'
login_pass = ''

def parse(self, response):
(args, url, method) = fill_login_form(response.url,
response.body, self.login_user, self.login_pass)
return FormRequest(url, method=method, formdata=args,
callback=self.after_login)

def after_login(self, response):
for i in range(0,6):
request = Request('https://www.example.com/page_to_scrape', callback=self.get_table, dont_filter = True)
request.meta['dateTime'] = str(datetime.now())
request.meta['order'] = str(i)
yield request
time.sleep(600)
return

def get_table(self, response):
table = response.xpath('//table[@class="example_table"]/tbody/tr[not(contains(@class,"thead"))]')
Data=[]
for n_row in range(0,len(table)):
row = table[n_row]
Data.append(row.xpath('td[1]/text()').extract())

dictionary = {'Time': response.meta['dateTime'],
'Order': response.meta['order'],
'Data': Data}
with open('output.txt', 'a') as f:
f.write(str(dictionary) + '\n')
return

最佳答案

您可能想阅读以下内容:https://doc.scrapy.org/en/latest/faq.html#does-scrapy-crawl-in-breadth-first-or-depth-first-order

还有这个:LIFO (last in, first out)

Scrapy 不会按照您给他的顺序处理请求,但您可以更改此行为(您可以使用上面链接中描述的选项)。

此外,您可能需要考虑使用 Itemsfeed exporters而不是像你一样处理你的元素......

编辑:在上面:

DEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'

我还需要设置

CONCURRENT_REQUESTS = 1

后一个设置是逐个发出请求

关于python - scrapy蜘蛛: output in chronological order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47337917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com