在 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']
我正在尝试抓取一个网站,您可以在下面的代码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']