Scrapy:用一个蜘蛛从 200 个不同的域中抓取 200 个不同的 URL
Scrapy: Crawling 200 different URLs from 200 different Domains with one Spider
我需要为一个项目抓取 200 个不同的网站,我想通过启动抓取工具一次,然后在接下来的几个小时内自行处理来完成。 URLs 将在 txt 或 csv 文件中。
到目前为止,我有两种略有不同的方法。
第一次尝试:
class MySpider(CrawlSpider):
name = 'spiderName'
read_urls = open('../../urls.txt', 'r')
for url in read_urls.readlines():
url = url.strip()
allowed_domains = [url[4:]]
start_urls = ['http://' + url]
read_urls.close()
rules = (Rule(LinkExtractor(allow = ('', )), callback = 'parse_stuff', follow = True),)
def parse_stuff(self, response):
hxs = Selector(response)
sites = hxs.xpath('//html')
items_main = []
for site in sites:
loader = ItemLoader(item = Items_Main(), response = response)
loader.add_xpath('a_title', '//head/title/text()')
...
items_main.append(loader.load_item())
return items_main
这里它只有 txt 文件中的最后一个 URL 但它工作正常并且我能够限制 allowed_domains
。
在 Whosebug 上发现的第二次尝试基本上是相同的,除了 start_urls = [url.strip() for url in read_urls.readlines()]
这给了我以下错误 raise ValueError('Missing scheme in request url: %s' % self._url)
.
您覆盖了 for 循环中的列表。
在循环之前初始化列表并在循环内追加。
allowed_domains = []
start_urls = []
for url in read_urls.readlines():
url = url.strip()
allowed_domains = allowed_domains + [url[4:]]
start_urls = start_urls + ['http://' + url]
我需要为一个项目抓取 200 个不同的网站,我想通过启动抓取工具一次,然后在接下来的几个小时内自行处理来完成。 URLs 将在 txt 或 csv 文件中。 到目前为止,我有两种略有不同的方法。 第一次尝试:
class MySpider(CrawlSpider):
name = 'spiderName'
read_urls = open('../../urls.txt', 'r')
for url in read_urls.readlines():
url = url.strip()
allowed_domains = [url[4:]]
start_urls = ['http://' + url]
read_urls.close()
rules = (Rule(LinkExtractor(allow = ('', )), callback = 'parse_stuff', follow = True),)
def parse_stuff(self, response):
hxs = Selector(response)
sites = hxs.xpath('//html')
items_main = []
for site in sites:
loader = ItemLoader(item = Items_Main(), response = response)
loader.add_xpath('a_title', '//head/title/text()')
...
items_main.append(loader.load_item())
return items_main
这里它只有 txt 文件中的最后一个 URL 但它工作正常并且我能够限制 allowed_domains
。
在 Whosebug 上发现的第二次尝试基本上是相同的,除了 start_urls = [url.strip() for url in read_urls.readlines()]
这给了我以下错误 raise ValueError('Missing scheme in request url: %s' % self._url)
.
您覆盖了 for 循环中的列表。
在循环之前初始化列表并在循环内追加。
allowed_domains = []
start_urls = []
for url in read_urls.readlines():
url = url.strip()
allowed_domains = allowed_domains + [url[4:]]
start_urls = start_urls + ['http://' + url]