gpt4 book ai didi

python - 使用 "\d"通过 Scrapy for Python 2 从 Div 中提取数据时出现 XPath 错误

转载 作者:行者123 更新时间:2023-12-01 05:27:16 24 4
gpt4 key购买 nike

我正在尝试使用 scrapy for python 2 从 div 中提取数据。我现在意识到我无法在提取的 div Xpath 中使用像\d 这样的正则表达式命令。我该如何解决这个问题?使用\d{,2} 我试图告诉 python“嘿,这里应该有一个数字,其值在 1-100 之间”提前致谢

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from craigslist_sample.items import CraigslistSampleItem
import re

class MySpider(CrawlSpider):
name = "craigs" #add the 's' to make functional = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = ["http://philadelphia.craigslist.org/cta/"]

rules = (Rule (SgmlLinkExtractor(allow=("index\d\d\d{,3}\.html", ),restrict_xpaths= ('//*[@id="toc_rows"]/div[3]/div/div/span/a',))
, callback="parse_items", follow= True),
)

def parse_items(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select('//span[@class="pl"] | //span[@class="12"]')
items = []

for titles in titles:
item = CraigslistSampleItem()
item ["price"] = titles.select('//*[@id="toc_rows"]/div[2]/p[position() <=100])/span[3]/span[1]/text()').extract()
item ["date"] = titles.select('//*[@id="toc_rows"]/div[2]/p[position() <=100]]/span[2]/span/text()').extract()
item ["title"] = titles.select("a/text()").extract()
item ["link"] = titles.select("a/@href").extract()
items.append(item)
return(items)

url 中的 html 片段是这样的:

item ["date"] = span class="date">1 月 12 日/span>

商品[“价格”] = span class="price">1950 美元/span>

都存在于该父祖先节点下div id="toc_rows"

最佳答案

我假设p[\d{,2}]意思是“前两个 <p> 元素”。

这是通过 position() 完成的:p[position() <= 2] 。 (提示:position()1 开始计数。)

请注意position()根据上下文进行计数。如果您选择p元素,它计算的是它们,而不是它们前面的元素数量。

<div>
<p>First paragraph</p> <!-- div/p[1] or div/p[position() = 1] -->
<div>Something else</div> <!-- div/div/[1] or div/div[position() = 1] -->
<p>Second paragraph</p> <!-- div/p[2] or div/p[position() = 2] -->

<!-- div/p[position() <= 2] will select both <p> here -->
</div>
<小时/>

编辑(修改问题后)。这是我要做的:

  • 首先,选择所有行:"//div[@id = 'toc_row']//div[@class = 'row']"
  • 然后,对于每一行,选择...
    • 价格:"./span[@class = 'price']/text()"
    • 日期:"./span[@class = 'date']/text()"
    • 标题:"./span[@class = 'pl']/a/text()"
    • 链接:"./span[@class = 'pl']/a/@href"

关于python - 使用 "\d"通过 Scrapy for Python 2 从 Div 中提取数据时出现 XPath 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com