我开始学习刮伤,我想废掉一个sitemap.xml,把里面的所有页面都废掉,然后从站点地图中删除页面中的一个特定链接。
例如:
在我的站点地图上,我有link1。我转到link1,在页面内部,我想要删除一个名为linkA的特定链接,以获得该链接的内容页。
首先,我定义了parse_step1的regex规则。它允许我从站点地图中获取特定的urls。效果很好。
然后,我不知道如何告诉我的刮板“从链接中删除页面,找到一个特定的url和这个特定url的页面内容”。
我试图添加由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')
]有什么见解吗?
谢谢
发布于 2022-08-12 07:53:31
你有一个网站的链接要传递到你的抓取脚本
的过程中得到了一些其他的链接,把这个链接传递给你的Scrapy
例如,如果有Site1和link1和link2,然后跟着link1,就可以得到Site2和link3 .在这里,您可以使用Depth First Search algorithm来实现它。
->您可以将所有收集到的链接存储在某个列表中。并在解析器函数的开头添加一个计数器。因此,每次你去另一个链接-添加1到你的计数器-这将是当前链接的索引。一旦网站没有任何链接-你将进入最新的未解析链接(例如,当你得到其中两个,并遵循第一个)。您可以通过函数的recursion调用来实现它。
我还可以看到使用xml.etree.ElementTree的另一种方法(因为您使用xml ):
import xml.etree.ElementTree as et
import pandas as pd
def parse_xml(path) -> pd.DataFrame:
tree = et.parse(path)
root = tree.getroot()
for child in root:
attr1 = child[0].attrib['attr1']
attr2 = child[0].attrib['attr2']
attr3 = child[1].attrib['attr3']https://stackoverflow.com/questions/73330758
复制相似问题