首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy报废xml站点地图,然后按照链接

Scrapy报废xml站点地图,然后按照链接
EN

Stack Overflow用户
提问于 2022-08-12 07:40:38
回答 1查看 48关注 0票数 0

我开始学习刮伤,我想废掉一个sitemap.xml,把里面的所有页面都废掉,然后从站点地图中删除页面中的一个特定链接。

例如:

在我的站点地图上,我有link1。我转到link1,在页面内部,我想要删除一个名为linkA的特定链接,以获得该链接的内容页。

首先,我定义了parse_step1的regex规则。它允许我从站点地图中获取特定的urls。效果很好。

然后,我不知道如何告诉我的刮板“从链接中删除页面,找到一个特定的url和这个特定url的页面内容”。

我试图添加由regex验证的第二条规则,但我无法使它工作。

代码语言:javascript
复制
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')
                     ]

有什么见解吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-08-12 07:53:31

你有一个网站的链接要传递到你的抓取脚本

  • 你在废除script

  • Repeat

的过程中得到了一些其他的链接,把这个链接传递给你的Scrapy

例如,如果有Site1和link1和link2,然后跟着link1,就可以得到Site2和link3 .在这里,您可以使用Depth First Search algorithm来实现它。

->您可以将所有收集到的链接存储在某个列表中。并在解析器函数的开头添加一个计数器。因此,每次你去另一个链接-添加1到你的计数器-这将是当前链接的索引。一旦网站没有任何链接-你将进入最新的未解析链接(例如,当你得到其中两个,并遵循第一个)。您可以通过函数的recursion调用来实现它。

我还可以看到使用xml.etree.ElementTree的另一种方法(因为您使用xml ):

代码语言:javascript
复制
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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73330758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档