Python爬虫——XPath问题集合

本文汇总了Python爬虫过程中遇到的XPath相关问题及其解决方案,包括requests异常(如http连接限制、ip被封、请求过快)的处理,打印出`<Element a at 0x???????>`的原因及解决,以及面对不规则数据时如何利用XPath和CSS选择器进行有效爬取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. requests异常

[<Element span at 0x223a9da6488>]
  • 可能原因:

           1. http 的连接数超过最大限制,默认的情况下连接是keep-alive的,导致了服务器保持了太多连接而不能再新建连接。

           2. ip 被封。

           3. 请求过快。

  • 解决方法:

           1. 在header中不使用持久连接。设置

‘Connection’: ‘close’

      或

requests.adapters.DEFAULT_RETRIES = 5

           2. requests请求时有时会请求不到页面,或是请求到空白的页面,超时要重试几次,使用语句:try…except...

           3. 使用代理ip

           4. 若是请求过快,可设置time.sleep

try:
    page = requests.get(url)
except:
    time.sleep(5)
    continue

​​​​​2. 输出<Element a at 0x???????>

  • 原因:打印变量的时候得到的这个值,其实它是一个列表,然后列表中的每一个值都是一个字典
  • 解决措施:
links = text.xpath('//*[@id="interest_sectl"]/div/span[2]')
for index in range(len(links)):
    # links[index]返回的是一个字典
    if (index % 2) == 0:
    star_5 = links[index].text
    print(star_5)

3. 不规则数据爬取

  • 方法一 XPath 选择器

       在批量爬取时,通过右击网页标签选择XPath地址(如图1所示)时往往存在页面网页结构不一致等问题,这时采用Xpath选择器方法绝大多数情况下可以有效获取信息。

图1  网页选择Xpath地址

 

eg. 关于XPath选择器语法请看文章: https://blog.youkuaiyun.com/Simon_LHM/article/details/115278997

# selenium方法
details = browser.find_element_by_xpath('//*[@id="info"]').text
  • 方法二 CSS选择器

       我们知道HTML页面中的元素就是通过CSS选择器进行控制的,因此利用CSS选择器来选取元素进行爬取也是一种比较好的方法。

eg.关于CSS选择器语法请参考:https://www.w3school.com.cn/cssref/css_selectors.asp

# selenium方法
details = browser.find_element_by_css_selector('//*[@id="info"]').text

待续...........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值