【发布时间】:2020-08-10 20:59:36
【问题描述】:
我是 Python 和 Scrapy 的新手。所以,我不知道是否可以实现以下场景。 因此,请告诉我是否可能。
我知道 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()
在所有网站中,HTML 标签可能会发生变化。因此,我想将 HTML 标签声明单独保存在一个文件中,并在另一个文件中解析和抓取每个项目。
【问题讨论】:
-
我的建议是考虑 xpath 选择器,它们是广泛的并且依赖于属性而不是像 div/div[1]/div/div[1]/div[1]/div 这样的多个子元素[1]/h3/a/text() 你在那里。而不是使用选择器的文本文件。如果没有发生刮擦,则更改代码与编辑文本文件之间没有太大区别。例如 response.xpath(//div[contains(@class,"ATTRIBUTE")]') 非常广泛。
-
@AaronS 是的,我接受你的观点。在大多数情况下,我会使用广泛并依赖于属性。只有在少数情况下,我使用了多个子元素。我将很快将其更改为广泛的属性。无论如何,我想将 HTML 标签保存在一个单独的文件中,并在 Spider 类中调用它们进行解析。如果有办法,那真的很有帮助。
标签: parsing scrapy css-selectors