Parsing 从Scrapy spider类中的另一个文件调用HTML标记并解析它们
我不熟悉Python和Scrapy。因此,我不知道是否可以实现以下场景。 因此,如果可能的话,请告诉我 我知道刮痧通常是这样工作的: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
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非常陌生,所以我无法找到这个解决方案。不管怎样,我试图提高投票率,但由于我的声誉很低,我不能。