我开始学习scrapy,我想刮一个sitemap.xml来刮它里面的所有页面,然后从sitemap中刮一个特定的链接。
例如:
在我的网站Map上,我有链接1。我去link1和内部的网页,我想刮一个特定的链接称为linkA获得此链接的内容页。
首先,我为 parse_step1 定义正则表达式规则。它允许我从网站Map中获取特定的网址。效果很好。
然后,我不知道该怎么做,告诉我的刮刀 “从链接中刮取页面,找到一个特定的网址,并刮取此特定网址的页面内容”。
我尝试添加第二个规则,通过regex进行验证,但我无法使其工作。
class SiteSpider(SitemapSpider):
name = 'site'
allowed_domains = ['domain.fr']
# generate_start_urls()
sitemap_urls = ["https://domain.fr/mainsitemap.xml"]
sitemap_rules = [('^.*\/([a-zA-Z]{2})\/\/?.*', 'parse_step1'),
('.*\/[0-9]{2}', 'parse_step2')
]
有什么见解吗?
1条答案
按热度按时间tv6aics11#
1.你有一个网站的链接要传递到你的Scrapy脚本
1.你在报废时得到一些其他环节
1.将此链接传递到Scrapy脚本
1.重复
例如,如果有一个带有link 1和link 2的Site 1,在link 1之后,你会得到一个带有link 3的Site 2...所以在这里你可以使用
Depth First Search algorithm
来实现它。->您可以将所有收集的链接存储在某个列表中。并在解析器函数的开头添加一个计数器。所以每次你去另一个链接-加1到你的计数器-这将是当前链接的索引。一旦网站没有任何链接-您将转到最新的未解析链接(例如.当你得到其中的两个,然后跟随第一个)。你可以通过函数的
recursion
调用来实现它。我还可以看到另一种使用
xml.etree.ElementTree
的方法(因为您使用的是xml文档):