python - Xpath 只给我第一个项目,而我想要所有项目(使用 Scrapy)
问题描述
我正在使用 Scrapy 从该页面 (Booking)中抓取结果。我们的想法是获取页面中所有酒店的所有 URL。
在我的 Scrapy 中的蜘蛛中,我放了:
def __init__(self, *args, **kwargs):
super(BookingScoreSpider, self).__init__(*args, **kwargs)
self.start_urls = [kwargs.get('start_url')]
def parse(self, response):
global url
print(response.xpath('normalize-space(//a[@class="hotel_name_link url"]/@href)'))
for hotelurl in response.xpath('normalize-space(//a[@class="hotel_name_link url"]/@href)'):
url = response.urljoin(hotelurl.extract())
print(url)
但是循环似乎只包含一个元素(第一家酒店)......所以蜘蛛正在工作,我得到了第一家酒店的 URL,但循环没有继续,好像蜘蛛只找到了一个类“hotel_name_link url”...当我检查网页时,我发现很多这样的项目。
你能帮助我吗 ?
解决方案
您使用的是 XPath 1.0(遗憾的是,scrapy 在这里使用了 20 年的技术),在 XPath 1.0 中,应用于节点集的 normalize-space() 会忽略节点集中除第一个节点之外的所有节点。(在当前版本的 XPath 3.1 中,您可以//a[...] ! normalize-space()
将其应用于每个节点并返回一系列字符串。
您最好的选择可能是取出 normalize-space(),返回未标准化的节点,然后在调用代码中处理它们。
推荐阅读
- python - python连续元素交换列表项
- excel - Un Hiding all sheets and go to specific sheet
- c++ - overload == to compare two linked list recursively
- python - What is the name of the design pattern used by this validation code?
- php - Method Illuminate\Database\Eloquent\Collection::currentPage does not exist
- json - Unable to create the column and value from the JSON nested key Value Pair using Spark/Scala
- c# - C# - Dictionary that whose value is a List of multiple Types
- r - Only display correlation coefficient in ggplot stat_cor
- apache - 如何在我自己的本地网络中为 pi 上的子域配置 apache?
- hl7-fhir - “患者建议喝水” - 如何在 SNOMED/FHIR 中进行编码