Python 2.7 Scrapy和networkX创建网站之间的域连接图

Python 2.7 Scrapy和networkX创建网站之间的域连接图,python-2.7,graph,web-scraping,scrapy,networkx,Python 2.7,Graph,Web Scraping,Scrapy,Networkx,请耐心等待,我是python和堆栈溢出的新手,我提前为任何错误道歉 我试图创建一个有向图,其中每个节点表示一个域,节点之间的每条边表示父节点与子节点之间存在链接的事实 (X-->Y表示站点X有到站点Y的链接,依此类推) 为此,我使用scrapy递归地从起始url提取外部链接 这是我目前掌握的代码: class LinkList(Item): current_url = Field() referring_url = Field() class WebcrawlerSpider(

请耐心等待,我是python和堆栈溢出的新手,我提前为任何错误道歉

我试图创建一个有向图,其中每个节点表示一个域,节点之间的每条边表示父节点与子节点之间存在链接的事实

(X-->Y表示站点X有到站点Y的链接,依此类推)

为此,我使用scrapy递归地从起始url提取外部链接

这是我目前掌握的代码:

class LinkList(Item):
    current_url = Field()
    referring_url = Field()

class WebcrawlerSpider(CrawlSpider):
    name = 'webcrawler'
    allowed_domains = []
    custom_settings = {
        'DEPTH_LIMIT': '5',
    }
    start_urls = ['https://www.wehiweb.com']
    response_url = ""
    rules = (
        Rule (
            SgmlLinkExtractor(
                allow=("((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)", ),),
            callback="parse_items",
            process_links="filter_links",
            follow= True),
    )

    def parse_start_url(self, response):
        self.response_url = response.url
        return self.parse_items(response)

    def get_base_domain(self, url):
        base = urlparse(url).netloc
        if base.upper().startswith("WWW."):
            base = base[4:]
        elif base.upper().startswith("FTP."):
            base = base[4:]
        # drop any ports
        base = base.split(':')[0]
        return base

    def filter_links(self, links):
        baseDomain = self.get_base_domain( self.response_url)
        filteredLinks = []
        for link in links:
            if link.url.find(baseDomain) < 0:
                filteredLinks.append(link)
        return filteredLinks

    def parse_items(self, response):
        self.response_url = response.url
        sel = Selector(response)
        items = []
        item = LinkList()
        item["current_url"] = response.url
        referring_url = response.request.headers.get('Referer', None)
        item["referring_url"] = referring_url
        items.append(item)
        return items



def main():
        links = LinkList()
        crawler = WebcrawlerSpider()
        #crawler.allowed_domains.append('https://www.wehiweb.com')
        crawler.start_urls.append('https://www.wehiweb.com')
        process = CrawlerProcess()
        process.crawl(WebcrawlerSpider)
        process.start()



 if __name__ == "__main__":
        main()
类链接列表(项):
当前url=字段()
引用\u url=Field()
类WebcrawlerSpider(爬行蜘蛛):
名称='webcrawler'
允许的_域=[]
自定义设置={
“深度限制”:“5”,
}
起始URL=['https://www.wehiweb.com']
响应_url=“”
规则=(
统治(
SGMLLinkedExtractor(
允许=(((mailto\:|(news |(ht | f)tp(s?)\:/){1}\s+,),),
callback=“parse_items”,
处理链接=“过滤链接”,
follow=True),
)
def parse_start_url(自我,响应):
self.response\u url=response.url
返回self.parse_项(响应)
def get_base_域(自身,url):
base=urlparse(url).netloc
如果base.upper().startswith(“WWW.”):
基数=基数[4:]
elif base.upper().startswith(“FTP”):
基数=基数[4:]
#删除任何端口
base=base.split(“:”)[0]
返回基地
def过滤器链接(自身、链接):
baseDomain=self.get\u base\u domain(self.response\u url)
FilteredLink=[]
对于链接中的链接:
如果link.url.find(baseDomain)<0:
filteredLinks.append(链接)
返回过滤器链接
def解析_项(自身、响应):
self.response\u url=response.url
sel=选择器(响应)
项目=[]
item=LinkList()
项目[“当前url”]=response.url
referenting\u url=response.request.headers.get('Referer',None)
项目[“引用url”]=引用url
items.append(项目)
退货项目
def main():
links=LinkList()
crawler=WebcrawlerSpider()
#爬虫程序。允许的\u域。附加('https://www.wehiweb.com')
crawler.start\u url.append('https://www.wehiweb.com')
进程=爬网进程()
进程爬网(WebcrawlerSpider)
process.start()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
我现在想做的是创建一个新的networkX图,如他们的文档中所解释的那样,并将每个当前的\u url添加为一个节点,从引用的\u url到它有一个边。 我正在努力从LinkList类中检索元素,并将它们放在一个普通的数据结构中,如列表或其他si,然后我可以在main()或其他类中调用它并将其添加到图形中。 我遵循了scrapy docu,但我迷路了/不理解整个项目,以及如何从它或解析函数中获取数据

非常感谢您的任何说明/帮助


谢谢你

很抱歉我有点累了,但我似乎找不到与我的编辑器中的内容有什么不同,请你给我指出正确的方向好吗?哦,我现在明白了,对不起,现在应该修好了,对不起,我的坏:)我不知道我修好了,虽然谢谢,我很抱歉,我有点累了,但我似乎找不到与我的编辑器中的不同之处,请你给我指一下正确的方向好吗?哦,我现在明白了,对不起,我现在应该修好了,对不起,我的坏:)我不知道我修好了,谢谢