使用Scrapy从文本文件中的多个URL中截取所有外部链接

时间:2016-08-28 14:12:56

标签: python url web-scraping scrapy web-crawler

我是Scrapy和Python的新手,因此我是初学者。我希望能够让Scrapy读取一个包含大约100k网址的种子列表的文本文件,让Scrapy访问每个URL,并提取在每个种子URL上找到的所有外部URL(其他网站的URL)并将结果导出到一个单独的文本文件。

Scrapy应该只访问文本文件中的URL,而不是蜘蛛网,并且可以访问任何其他URL。

我希望能够尽快让Scrapy工作,我有一个非常强大的服务器,带有1GBS线路。我列表中的每个网址都来自一个独特的域名,因此我根本不会点击任何一个网站,因此不会遇到IP阻止。

我如何在Scrapy中创建项目,以便能够从存储在文本文件中的网址列表中提取所有外部链接?

感谢。

1 个答案:

答案 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