【发布时间】:2017-11-16 19:46:54
【问题描述】:
我正在使用 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
【问题讨论】:
-
我不确定我是否理解你的问题。这可能是因为我几个月前才开始编程。如果您提到在
after login方法中使用yield和return,我是从网上找到的一些示例中获取的。该代码有效,只是“output.txt”中的行不是按时间顺序排列 -
你能链接到这样的例子吗? (
yield创建一个生成器表达式,其中.next()提供下一个值。这与return不同。)
标签: python scrapy web-crawler