python爬虫关于xpath定位问题


import requests
from lxml import etree

url = 'https://we.51job.com/pc/search?keyword=python'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}

response = requests.get(url = url, headers = headers)
response.encoding = 'utf-8'
html = etree.HTML(response.text)

# 获取职位名称
#name = html.xpath('//div[@class="t"]/span/text()')
#print(name)
name = html.xpath('/html/body/div[1]/div/div[2]/div/div/div[2]/div/div[2]/div/div[2]/div[1]/div[1]/div[2]/div/span/text()')
print(name)




哪个大神告诉我,我这两种定位办法,通过爬虫助手验证,定位没有问题,但是返回的是空列表是什么情况?

动态网页

【以下回答由 GPT 生成】

问题标题: 在使用xpath定位时,返回的结果为空列表的问题 问题标签: python, xpath

问题内容:

import requests
from lxml import etree

url = 'https://we.51job.com/pc/search?keyword=python'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}

response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
html = etree.HTML(response.text)

# 获取职位名称
name = html.xpath('/html/body/div[1]/div/div[2]/div/div/div[2]/div/div[2]/div/div[2]/div[1]/div[1]/div[2]/div/span/text()')
print(name)

为什么我的xpath定位方式无法获取到职位名称在使用爬虫助手验证时定位是正确的但返回的结果是空列表请问可能是什么问题导致的呢

在使用xpath定位时,返回结果为空列表的问题可能有以下几个原因:

  1. 定位路径错误 - 请确保你的xpath路径是正确的。可以通过Chrome浏览器的开发者工具来确定正确的xpath路径。

建议的解决方案:使用Chrome浏览器,打开招聘网站,然后右键点击你要定位的元素,选择"检查"。在开发者工具中,右键点击该元素的html代码,然后选择"Copy" -> "Copy XPath",将复制的xpath路径粘贴到代码中的xpath定位语句处。

  1. 网页动态加载 - 某些网页会通过异步加载技术动态获取数据,这可能导致xpath定位的时机不正确,从而无法获取到元素。

建议的解决方案:可以尝试使用selenium库来模拟浏览器行为,等待页面完全加载后再进行xpath定位。以下是一个示例代码:

```python from selenium import webdriver

url = 'https://we.51job.com/pc/search?keyword=python'

# 创建Chrome浏览器实例 driver = webdriver.Chrome() driver.get(url)

# 等待页面加载 driver.implicitly_wait(10)

# 获取页面源码 html = driver.page_source

# 使用lxml和xpath进行解析 tree = etree.HTML(html) name = tree.xpath('/html/body/div[1]/div/div[2]/div/div/div[2]/div/div[2]/div/div[2]/div[1]/div[1]/div[2]/div/span/text()') print(name)

# 关闭浏览器实例 driver.quit() ```

  1. 反爬虫机制 - 招聘网站可能采取了一些反爬虫措施,例如检测用户的请求头、IP地址等信息,如果被检测到是爬虫,会返回空数据。你可以尝试更换请求头,或者使用代理IP来应对该问题。

  2. 网页内容变化 - 招聘网站的网页结构可能会发生变化,导致之前的xpath定位路径无效。

建议的解决方案:更新并验证xpath定位路径。可以通过Chrome浏览器的开发者工具来确定新的xpath路径。

如果以上解决方案都不起作用,还可以尝试使用其他的爬虫库,例如BeautifulSoup或Scrapy,它们也能进行页面解析和数据提取。希望这些解决方案能帮助到你解决问题。如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你在使用网页助手定位的内容是渲染之后的内容,你请求获得的数据大概率是异步加载的,所以定位不到。