我是Scrapy和Python的新手,因此我是初学者。我希望能够让Scrapy读取一个包含大约100k网址的种子列表的文本文件,让Scrapy访问每个URL,并提取在每个种子URL上找到的所有外部URL(其他网站的URL)并将结果导出到一个单独的文本文件。
Scrapy应该只访问文本文件中的URL,而不是蜘蛛网,并且可以访问任何其他URL。
我希望能够尽快让Scrapy工作,我有一个非常强大的服务器,带有1GBS线路。我列表中的每个网址都来自一个独特的域名,因此我根本不会点击任何一个网站,因此不会遇到IP阻止。
我如何在Scrapy中创建项目,以便能够从存储在文本文件中的网址列表中提取所有外部链接?
感谢。
答案 0 :(得分:1)
你应该使用:
1. start_requests函数用于读取URL列表。
2.所有“a”html元素的css或xpath选择器。
from scrapy import Spider
class YourSpider(Spider):
name = "your_spider"
def start_requests(self):
with open('your_input.txt', 'r') as f: # read the list of urls
for url in f.readlines() # process each of them
yield Request(url, callback=self.parse)
def parse(self, response):
item = YourItem(parent_url=response.url)
item['child_urls'] = response.css('a::attr(href)').extract()
return item
有关start_requests的更多信息:
http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.start_requests
要将提取的项目提取到另一个文件,请使用项目管道或Feed导出。这里的基本管道示例:
http://doc.scrapy.org/en/latest/topics/item-pipeline.html#write-items-to-a-json-file