我有一个项目,我正试图把它放在一起做一个数据分析实验。我心里有一条管道,但我不知道如何继续获取我需要的数据。 我想抓取一个网站,找到所有的内部和外部链接,分开他们,并爬行外部链接递归,直到它达到一定的深度。我想这样做来创建一个网站的所有连接图,然后使用中心性算法来找到中心节点并从那里继续。 理想情况下,我希望在这个项目中使用Python2。 我看了一眼,漂亮的汤和其他图书馆,但都是相当混乱。在
任何帮助和/或建议将是非常感谢爬行和创建图形特别是
谢谢你
编辑:
我正在尝试实现您建议的解决方案,并且使用下面的代码,我可以在调试信息中看到,它正在查找链接,但要么它们没有保存在LinkList类中,要么我提取错误,它们正在被过滤。在
有什么建议吗?在
class LinkList(Item):
url = Field()
class WebcrawlerSpider(CrawlSpider):
name = 'webcrawler'
allowed_domains = ['https://www.wehiweb.com']
start_urls = ['https://www.wehiweb.com']
rules = (
Rule(LxmlLinkExtractor(allow=()), callback='parse_obj', follow=True),
)
def parse_obj(self,response):
item = LinkList()
item['url'] = []
for link in LxmlLinkExtractor(allow=(),deny = self.allowed_domains).extract_links(response):
item['url'].append(link.url)
yield item
def main():
links = LinkList()
process = CrawlerProcess()
process.crawl(WebcrawlerSpider)
process.start()
print(links.items())
if __name__ == "__main__":
main()
斯皮奇应该可以用这个。大多数人使用它从网站中提取数据(抓取),但它也可以用于简单的爬行。在
在scrapy中,你有蜘蛛,它们会抓取网站并跟踪链接。一个垃圾项目可以由许多spider组成,但是在标准设置中,每个spider都有自己的队列并执行自己的任务。在
正如您描述的用例一样,我推荐两种不同的scrapy spider:
allowed_domains
设置和非常高甚至是0(=无限)MAX_DEPTH
设置,以便它将爬网整个域allowed_domains
(将允许所有域)和一个低的MAX_DEPTH
设置的异地抓取,以便在经过一定数量的跳跃后停止从您的}的概念。您可以从解析响应的方法返回}:
parse
方法的角度来看,scray有一个Request
和{Request
和{parse
方法因此,无论何时你想跟踪一个链接,你将从你的解析方法中
yield
一个Request
。对于项目的所有结果,您将得到Item
。在在你的例子中,我认为你的
Item
是这样的:这将允许您返回项目
^{pr2}$link_source="http://example.com/", link_target="http://example.com/subsite"
,如果您在http://example.com/
页面上找到了/subsite
的链接:您可能会看到我没有做任何深度检查等等,您不必在您的
parse
方法中手动执行此操作,Middleware
附带了crapy ships。其中一个中间件名为OffsiteMiddleware
,它将检查你的蜘蛛是否被允许访问特定的域(使用选项allowed_domains
,查看垃圾教程)。另一个是DepthMiddleware
(也可以查看教程)。在这些结果可以写在任何你想写的地方。Scrapy附带了一个名为
feed exports
的东西,它允许您将数据写入文件。如果您需要更高级的东西,例如数据库,可以查看scrapy的Pipeline
。在我目前不认为需要其他库和项目,除了为您的数据收集废料。在
当然,当您想要处理数据时,您可能需要专门的数据结构,而不是纯文本文件。在
相关问题 更多 >
编程相关推荐