【发布时间】:2019-03-27 09:29:26
【问题描述】:
from scrapy import Spider, Request
from selenium import webdriver
class MySpider(Spider):
name = "my_spider"
def __init__(self):
self.browser = webdriver.Chrome(executable_path='E:/chromedriver')
self.browser.set_page_load_timeout(100)
def closed(self,spider):
print("spider closed")
self.browser.close()
def start_requests(self):
start_urls = []
with open("target_urls.txt", 'r', encoding='utf-8') as f:
for line in f:
url_id, url = line.split('\t\t')
start_urls.append(url)
for url in start_urls:
yield Request(url=url, callback=self.parse)
def parse(self, response):
yield {
'target_url': response.url,
'comments': response.xpath('//div[@class="comments"]//em//text()').extract()
}
上面是我的scrapy代码。我使用scrapy crawl my_spider -o comments.json 来运行爬虫。
您可能会注意到,对于我的每个url,都有一个唯一的url_id 与之关联。如何将每个爬取的结果与url_id 匹配。理想情况下,我想将url_id 存储在comments.json 的产量输出结果中。
非常感谢!
【问题讨论】:
-
另一个问题是,在我的输出文件
comments.json中,target_url与start_urls中的输入url不一样,有没有办法让target_url存储原始url?
标签: python python-3.x scrapy scrapy-pipeline