Web crawler 如何使用scrapy提取网站的链接图?

Web crawler 如何使用scrapy提取网站的链接图?,web-crawler,scrapy,Web Crawler,Scrapy,给定一个起始URLstart(以及一些关于允许域的规则等),我想生成一个有向图(V,E),其中V中的节点是可以从start访问的页面,并且有一个弧(u,V)在E中,只要页面u上有指向页面v的超链接 有没有一种简单的方法可以通过scrapy获得这样的图形?我也很乐意使用另一个开源工具,如果它能更容易/更好地实现目标。我不知道有任何工具或contrib能够精确地生成您想要的内容。你得造一只刮痒的蜘蛛才能做到这一点。我可以在这里解释必要的步骤: 创建一个scrapy项目并生成一个默认spider $

给定一个起始URL
start
(以及一些关于允许域的规则等),我想生成一个有向图(V,E),其中
V
中的节点是可以从
start
访问的页面,并且有一个弧
(u,V)
E
中,只要页面
u
上有指向页面
v
的超链接


有没有一种简单的方法可以通过
scrapy
获得这样的图形?我也很乐意使用另一个开源工具,如果它能更容易/更好地实现目标。

我不知道有任何工具或contrib能够精确地生成您想要的内容。你得造一只刮痒的蜘蛛才能做到这一点。我可以在这里解释必要的步骤:

  • 创建一个scrapy项目并生成一个默认spider

    $ scrapy startproject sitegraph
    $ cd sitegraph
    $ scrapy genspider graphspider mydomain.com
    
  • 这将创建一个带有items.py文件的目录。在此文件中添加以下行

    from scrapy.item import Item, Field
    
    class SitegraphItem(Item):
         url=Field()
         linkedurls=Field()
    
  • 在spider目录中,您将找到graphspider.py,并将其替换为(当然需要替换mydomain.com):

  • 然后编辑settings.py文件并添加(相应地更改文件名):

  • 现在您可以运行:

    $ scrapy crawl graphspider
    
  • 这将生成一个json文件,可用于构建图形

您可以使用networkx之类的软件包从pygraphviz中分析并绘制它(不建议用于大型站点)


我是新来的刮刮,我已经按照你上面发布的答案为sitegraph,我有一些疑问:-1)我有一个url的列表,并希望拿出所有的url的列表中的网站图,我们如何做到这一点?2) 我想利用相应页面的爬网内容3)我想将网站图及其内容存储在hdfs中,我们如何实现这一点?我对这些话题一无所知,请帮助我。
FEED_FORMAT="jsonlines"
FEED_URI="file:///tmp/sitegraph.json"
$ scrapy crawl graphspider
import json
import pygraphviz as pg

def loadgraph(fname):
        G=pg.AGraph(directed=True)
        for line in open(fname):
            j=json.loads(line)
            url=j["url"]
            G.add_node(url)
            for linked_url in j["linkedurls"]:
                G.add_edge(url,linked_url)
        return G

if __name__=='__main__':
        G=loadgraph("/tmp/sitegraph.json")
        G.layout(prog='dot')
        G.draw("sitegraph.png")