Python 2.7 Scrapy和networkX创建网站之间的域连接图
请耐心等待,我是python和堆栈溢出的新手,我提前为任何错误道歉 我试图创建一个有向图,其中每个节点表示一个域,节点之间的每条边表示父节点与子节点之间存在链接的事实 (X-->Y表示站点X有到站点Y的链接,依此类推) 为此,我使用scrapy递归地从起始url提取外部链接 这是我目前掌握的代码: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(
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,但我迷路了/不理解整个项目,以及如何从它或解析函数中获取数据
非常感谢您的任何说明/帮助
谢谢你很抱歉我有点累了,但我似乎找不到与我的编辑器中的内容有什么不同,请你给我指出正确的方向好吗?哦,我现在明白了,对不起,现在应该修好了,对不起,我的坏:)我不知道我修好了,虽然谢谢,我很抱歉,我有点累了,但我似乎找不到与我的编辑器中的不同之处,请你给我指一下正确的方向好吗?哦,我现在明白了,对不起,我现在应该修好了,对不起,我的坏:)我不知道我修好了,谢谢