Parsing 从Scrapy spider类中的另一个文件调用HTML标记并解析它们

Parsing 从Scrapy spider类中的另一个文件调用HTML标记并解析它们,parsing,scrapy,css-selectors,Parsing,Scrapy,Css Selectors,我不熟悉Python和Scrapy。因此,我不知道是否可以实现以下场景。 因此,如果可能的话,请告诉我 我知道刮痧通常是这样工作的: import scrapy from scrapy.loader import ItemLoader from ..items import Allitems class newspider(scrapy.Spider): name = "my_code" start_urls = ['URL_Name'] def

我不熟悉Python和Scrapy。因此,我不知道是否可以实现以下场景。 因此,如果可能的话,请告诉我

我知道刮痧通常是这样工作的:

import scrapy
from scrapy.loader import ItemLoader
from ..items import Allitems

class newspider(scrapy.Spider):
    name = "my_code"
    start_urls = ['URL_Name']

    def parse(self, response):
        class_name = ".product-list--list-item" 
        product_name_tag = "./div/div[1]/div/div[1]/div[1]/div[1]/h3/a/text()"
   
        selector1 = response.css(class_name)

        for items in selector1:
            loader = ItemLoader(item=Allitems(), selector=items)
            loader.add_xpath('Product_Name', product_name_tag)
            yield loader.load_item()
如何创建一个文件,在其中我可以添加所有在变量中声明的HTML标记,并在Spider类中调用它们,并通过选择器解析这些HTML标记

比如说-

Sample.txt:

class_name = ".product-list--list-item" 
product_name_tag = "./div/div[1]/div/div[1]/div[1]/div[1]/h3/a/text()"
import scrapy
from scrapy.loader import ItemLoader
from ..items import Allitems

class newspider(scrapy.Spider):
    name = "my_code"
    start_urls = ['URL_Name']

def parse(self, response):

*** Call Sample.txt ***

            selector1 = response.css(class_name)
            for items in selector1:
                loader = ItemLoader(item=Allitems(), selector=items)
                loader.ad+d_xpath('Product_Name', product_name_tag)
                yield loader.load_item()
蜘蛛文件:

class_name = ".product-list--list-item" 
product_name_tag = "./div/div[1]/div/div[1]/div[1]/div[1]/h3/a/text()"
import scrapy
from scrapy.loader import ItemLoader
from ..items import Allitems

class newspider(scrapy.Spider):
    name = "my_code"
    start_urls = ['URL_Name']

def parse(self, response):

*** Call Sample.txt ***

            selector1 = response.css(class_name)
            for items in selector1:
                loader = ItemLoader(item=Allitems(), selector=items)
                loader.ad+d_xpath('Product_Name', product_name_tag)
                yield loader.load_item()

在所有的网站中,HTML标签可能会改变。因此,我希望将HTML标记声明单独保存在一个文件中,并在另一个文件中解析和抓取每个项目。

我建议创建一个
sample.py
(而不是sample.txt),以便您可以导入变量。您仍然可以使用
.txt
,但必须将其作为文本文件加载并解析。使用
sample.py
可以精确导入:

import scrapy
from scrapy.loader import ItemLoader
from ..items import Allitems
from sample import class_name, product_name_tag  


class newspider(scrapy.Spider):
    name = "my_code"
    start_urls = ['URL_Name']

def parse(self, response):

    selector1 = response.css(class_name)
    for items in selector1:
        loader = ItemLoader(item=Allitems(), selector=items)
        loader.ad+d_xpath('Product_Name', product_name_tag)
        yield loader.load_item()

我的建议是考虑广泛的xpath选择器,它依赖于属性,而不是多个子元素,如div/div[1]/div/div[1]/div[1]/div[1]/h3/a/text()。而不是使用选择器的文本文件。如果没有出现擦伤,则更改代码与编辑文本文件之间没有太大区别。例如response.xpath(//div[contains(@class,“ATTRIBUTE”)])非常广泛。@AaronS是的,我接受你的观点。在大多数情况下,我会使用broad和dependent属性。只有在少数情况下,我使用了多个子元素。这些我将很快改变为广泛的属性。无论如何,我希望将HTML标记保存在一个单独的文件中,并在Spider类中调用它们进行解析。如果有办法的话,那真的很有帮助。很好的答案@renatodvc。非常感谢你的帮助。因为我对Python非常陌生,所以我无法找到这个解决方案。不管怎样,我试图提高投票率,但由于我的声誉很低,我不能。