关于python使用xpath爬取网页内容返回值为空列表的解决方法

                在使用XPath爬取网站中遇到的 写完代码发现运行后返回值为 [] 空列表

在这里插入图片描述

解决方法:

1、首先看看你的这段代码中是否有 "tbody"存在 ,把"tbody"去掉

text=dom.xpath('/html/body/div[2]/div[3]/div[3]/table/tbody/tr[1]/td[1]/a/text()')

        为什么呢? 因为在用xpath解析网页的时候,会遇到tbody标签。tbody标签有的时候可以解析,有的时候不可以解析,遇到tbody标签时要看网页源代码,如果源代码有tbody标签,就要加上tbody标签才能解析。
如果源代码没有tbody标签,那么tbody标签是浏览器对html文本进行一定的规范化而强行加上去的,这时如果xpath中有tbody则无法解析出来,此时去掉xpath中的tbody即可。

2、然后是headers的问题 ,返回值为 [] 时,请把 headers = {'...'} 和headers=headers 去掉

        或者使用这个,亲测没问题。

headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'}

3、最后是绝对路径和相对路径的问题 

#  以猪八戒网为例:

import requests
from lxml import etree
import time


url = "https://guangdong.zbj.com/search/service?kw=SaaS&r=1"
headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'}
html = requests.get(url=url, headers=headers).text

if len(html) > 100:  # 是否解析出text
    print('解析成功')
else:
    print('解析失败', len(html))

#  利用正则修改源代码里的注释符,起不到注释的作用
html_new = html.replace(r'<!--', '"').replace(r'-->', '"')  # 看情况
#  解析
tree = etree.HTML(html_new)
#  拿到每一个服务商的div
#  divs = tree.xpath('//*[@class="yxk-table"]/table/tbody/tr')  # 测试
divs = tree.xpath('//*[@class="search-result-list-service"]/div')  # 问题解决 如果这里返回值为 [] ,尝试使用相对路劲 已解决
# print(divs)
for div in divs:
    company_money = div.xpath('./div[2]/div[1]/span/text()')[0].strip("¥")  # 问题所在  已解决
    company = div.xpath('./div[2]/a[2]/div[2]/div[1]/div[1]/text()')[0]
    company_name = "saas".join(div.xpath('./div[2]/a[1]/text()'))
    company_place = div.xpath('./div[2]/a[2]/div[2]/div[1]/div[2]/text()')[0]

    finlly = [company, company_name, company_money, company_place]

    time.sleep(1)  # 防止频繁访问被封ip
    print("over!!", finlly)
    
print("all over!!!!")
#  绝对路径

"/html/body/div[2]/div/div/div[3]/div/div[3]/div[4]/div[1]/div[1]/div[2]/div[1]/span"

#  相对路径

'//*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]/div[1]/div[2]/div[1]/span'

CSDN 上关于这一块的内容太碎了 , 根据自己遇到的问题结合了一下 这里应该是最全的 祝你早日解决问题啦~

  • 28
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值