我需要一个关于列出网站中所有链接的最有效方法的建议。我能用php vb和我试图用scrapy做到这一点,但我的问题是,前两个输入网站的地址是不够的,我实际上要刮掉我的以下链接代码和scrapy我试图列出页面中的所有后续链接,但蜘蛛似乎永远不会结束研究。
在otehr的话中,我需要找到一种方法来输入网站地址,返回该网站中的所有链接。我需要为学校项目做这件事,我当时正在考虑对零售业进行一项小型研究,因此我需要为一个给定的网站列出多达20 000个结果。
有什么建议吗?
答案 0 :(得分:1)
Scrapy
是一个完美的选择。将CrawlSpider
与LinkExtractor
一起使用。
以下蜘蛛会follow
并收集网站上的所有链接。由于默认情况下启用了OffsiteMiddleware
,因此您无法从其他域获取链接。
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
如果您想在获得n个链接后限制链接数量并停止蜘蛛,请使用Close Spider
扩展名并设置CLOSESPIDER_ITEMCOUNT
设置:
CLOSESPIDER_ITEMCOUNT
一个整数,指定多个项目。如果蜘蛛擦伤 如果项目和项目通过项目,则超过该数量 管道,蜘蛛将被关闭的原因 closespider_itemcount。如果为零(或未设置),则不会关闭蜘蛛 按已通过的项目数量。
在您的情况下,您也可以使用CLOSESPIDER_PAGECOUNT
设置。
希望有所帮助。