在 Python LXML 中抓取属性值给出空结果

Scraping attributes values in Python LXML is giving empty results

我正在尝试抓取一个网站,您可以在下面的代码link中找到它

目标是从属性中获取数据,因为检查代码时没有文本

这是元素的完整 XPath:

/html/body/div[2]/div[3]/div/div[3]/section[1]/div/div[2]/div[1]

和代码:

import requests
from lxml import html
page = requests.get('https://www.meilleursagents.com/annonces/achat/nice-06000/appartement/')
tree = html.fromstring(page.content)

试图通过以下方式抓取属性 'data-wa-data' 值:

tree.xpath('/html/body/div[2]/div[3]/div/div[3]/section[1]/div/div[2]/div[1]/@data-wa-data')

产生空值

同样的问题是另一个有文本的元素:

tree.xpath('/html/body/div[2]/div[3]/div/div[3]/section[1]/div/div[2]/div[1]/div/a/div[1]/text()')

问题是此网站需要 User-Agent 下载完整的 HTML,而您的情况不存在。因此,要获得完整的页面,请将 user-agent 作为 header.

注意:这个网站在屏蔽方面比较激进。我的意思是,您甚至不能使用相同的 user-agent 连续发出两个请求。因此,我的建议是轮换代理和 user-agent。此外,还要在每个请求之间添加下载延迟,以避免快速访问服务器。

代码

import requests
from lxml import html

headers = {
    'user-agent':  'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0'
} 

page = requests.get('https://www.meilleursagents.com/annonces/achat/nice-06000/appartement/', headers=headers)

tree = html.fromstring(page.content)

print(tree.xpath('//div[@class="listing-item search-listing-result__item"]/@data-wa-data'))

输出

['listing_id=1971029217|realtor_id=21407|source=listings_results', 'listing_id=1971046117|realtor_id=74051|source=listings_results', 'listing_id=1971051280|realtor_id=71648|source=listings_results', 'listing_id=1971053639|realtor_id=21407|source=listings_results', 'listing_id=1971053645|realtor_id=38087|source=listings_results', 'listing_id=1971053650|realtor_id=29634|source=listings_results', 'listing_id=1971053651|realtor_id=29634|source=listings_results', 'listing_id=1971053652|realtor_id=29634|source=listings_results', 'listing_id=1971053656|realtor_id=39588|source=listings_results', 'listing_id=1971053658|realtor_id=39588|source=listings_results', 'listing_id=1971053661|realtor_id=39588|source=listings_results', 'listing_id=1971053662|realtor_id=39588|source=listings_results']