在使用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 上关于这一块的内容太碎了 , 根据自己遇到的问题结合了一下 这里应该是最全的 祝你早日解决问题啦~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐