我已经写了三个不同的xpath来为特定目的服务。他们三个工作得很好。但是,我在这一点上非常怀疑地认为选择哪一个因为它们在这个特定情况下都给出了相同的结果。我希望知道dos和don's ts。提前谢谢。
import requests
from lxml import html
page = requests.get('https://www.yellowpages.com/search?search_terms=pizza&geo_location_terms=Los+Angeles%2C+CA').text
tree = html.fromstring(page)
for row in tree.xpath('//div[@class="info"]'):
Phone = row.xpath('.//div[@class="phones phone primary"]/text()')
Phone1 = row.xpath('.//div[contains(@class,"phones")]/text()')
Phone2 = row.xpath(".//div[contains(concat(' ',@class,' '),' phones ')]/text()")
print (Phone, Phone1, Phone2)
答案 0 :(得分:1)
div [@class ="手机主电话"]可以正常工作,但如果您有班级="主要电话电话"则会失败。后者在浏览器中功能相同,但显然是一个不同的字符串。
div [contains(@class," phones")]不会分隔文本,因此它也会匹配class =" definatelynophonesever"
理想情况下,您希望以空格分隔的条目匹配中间的类,但前面或后一个没有空格 - 因此在最后一个路径中添加空格:
.//div[contains(concat(' ',@class,' '),' phones ')]
这将始终适用于任何包含单个单词" phone" class属性中的任何位置。