Scrapy -Scrapy -scrapy xml网站Map,然后点击链接

o2gm4chl  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(142)

我开始学习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')
                     ]

有什么见解吗?

tv6aics1

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文档):

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']

相关问题