我想知道是否有办法在整个网站上获取所有网址。似乎Scrapy with CrawSpider和LinkExtractor是一个不错的选择。考虑这个例子:
from scrapy.item import Field, Item
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
class SampleItem(Item):
link = Field()
class SampleSpider(CrawlSpider):
name = "sample_spider"
allowed_domains = ["domain.com"]
start_urls = ["http://domain.com"]
rules = (
Rule(LinkExtractor(), callback='parse_page', follow=True),
)
def parse_page(self, response):
item = SampleItem()
item['link'] = response.url
return item
这只蜘蛛没有给我我想要的东西。它只给我一个网页上的所有链接,即start_url。但我想要的是这个网站上的每个链接,包括那些不在起始网址上的链接。我是否正确理解了这个例子?我的问题有解决方案吗?非常感谢!
答案 0 :(得分:2)
通过Feed Export导出每个项目。这将生成网站上找到的所有链接的列表。
或者,编写自己的Item Pipeline以将所有链接导出到文件,数据库或您选择的任何内容。
另一种选择是创建一个蜘蛛级别列表,您可以将每个URL附加到该列表,而不是使用任何项目。你如何进行将真正取决于你需要蜘蛛,以及你打算如何使用它。
答案 1 :(得分:1)
你可以创建一个蜘蛛,收集页面中的所有链接,然后为每个链接,检查域名:如果它是相同的,解析这些链接,冲洗,重复。
我们无法保证您能够抓住所述域名的所有网页,请参阅How to get all webpages on a domain,以便在我看来对该问题进行了详细了解。
select * into NewTable