我正在尝试使用 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/