栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于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'', '"')  # 看情况
#  解析
tree = etree.HTML(html_new)
#  拿到每一个服务商的div
#  divs = tree.xpath('//*[@]/table/tbody/tr')  # 测试
divs = tree.xpath('//*[@]/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 上关于这一块的内容太碎了 , 根据自己遇到的问题结合了一下 这里应该是最全的 祝你早日解决问题啦~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号