#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

大家好,我是皮皮。

一、前言

前几天在Python钻石交流群【海南菜同学】问了一个​ ​Python​​网络爬虫的问题,下图是截图:

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

代码乍看起来没有问题,但结果是错误的。

[En]

The code looks fine at first, but the result is wrong.

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

代码如下:

url = "http://zw.hainan.gov.cn/wssc/ec/jlyhnkj.html"resp = requests.get(url,headers=headers)text = resp.textparse = etree.HTML(text)price = parse.xpath("//div[@class='productlist']/ul/li/div[4]/text()")print(type(price),len(price))# print(price)for i in price:    print(i.strip())

现在,他想让数据显示得更好,并删除换行符。

[En]

Now he wants to make the data display better and remove the newline characters.

二、实现过程

这里【dcpeng】给了一份代码,如下所示:

url = "http://zw.hainan.gov.cn/wssc/ec/jlyhnkj.html"resp = requests.get(url,headers=headers)text = resp.textparse = etree.HTML(text)price = parse.xpath("//div[@class='productlist']/ul/li/div[4]/text()")print(type(price),len(price))# print(price)for i in price:    print(i.strip().replace('\n',''))

但跑完后,效果并不是很大。因为自己的一些数据是空的,所以有些数据会显示为空,现在他想直接删除空数据。这里[Classmate]给出了一个代码,如下所示:

[En]

However, after running, the effect is not very great. Because some of its own data is empty, so some data will show empty, now he wants to remove the empty data directly. Here [classmate] gives a code, as follows:

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

然而,似乎仍然存在一些问题,12个项目,如何支付只有8个价格,缺少一个栏目。

[En]

However, there still seems to be some problems, 12 items, how to pay only 8 prices, missing a column.

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

后来才知道,原来不只是这个地方的问题,源头是选择器Xpath提取规则写的有问题。这里【甯同学】给了一份代码,如下图所示:

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

后来,粉丝们顺利解决了,代码如下:

[En]

Later, the fans solved it smoothly, and the code is as follows:

import requestsfrom lxml import etreeurl = "http://zw.hainan.gov.cn/wssc/ec/jlyhnkj.html"resp = requests.get(url)text = resp.textparse = etree.HTML(text)price = parse.xpath('//div[@class="product_price"]/text()')print(type(price),len(price))# print(price)for i in map(str.strip,filter(str.strip,price)):    print(i)

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

解决这个问题的方法还是很多的,这里再给出几个方法,这里【dcpeng】给了一份代码,如下所示:

resp = requests.get(url, headers=headers)text = resp.textparse = etree.HTML(text)price = parse.xpath("//div[@class='productlist']/ul/li")print(type(price), len(price))for i in price:    print(i.xpath('./div[@class="product_price"]/text()')[1].strip())

结果如下图所示:

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

【dcpeng】还提供了另外一个方法,如下所示:

resp = requests.get(url, headers=headers)text = resp.textparse = etree.HTML(text)price = parse.xpath("//div[@class='product_price']/text()")print(type(price), len(price))for i in price:    if i.strip():        print(i.replace('\n', '').strip())

结果如下图所示:

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

后来,[於亮先生]还提供了一个代码,内容如下:

[En]

Later, [Mr. Yu Liang] also provided a code, which is as follows:

url = "http://zw.hainan.gov.cn/wssc/ec/jlyhnkj.html"resp = requests.get(url)text = resp.textparse = etree.HTML(text)price = parse.xpath("//div[@class='productlist']/ul/li/div[4]/text()")# 直接使用列表推导式,去掉冗余数据price = [i.strip() for i in price if i.strip()]print(price)# 为了方便统计,再去掉¥符号,再转换成数字# price = [int(float(i.replace('¥', '').replace(',', ''))) for i in price]# 或者用re.sub去掉多余符号,再转换成数字,上下两种方法,选一个就行# 需要import re# price = [int(float(re.sub(r'[¥,]', '', i))) for i in price]print(price)

结果如图所示:

#yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

方法多多!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个​ ​Python​​网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【海南菜同学】提问,感谢【dcpeng】、【甯同学】、【瑜亮老师】给出的思路和代码解析,感谢【Engineer】、【此类生物】、【皮皮】、【心田有垢生荒草】等人参与学习交流。

Original: https://blog.51cto.com/u_13389043/5634480
Author: Python进阶者
Title: #yyds干货盘点#Python网络爬虫为何获得的内容,有好多无用的? 是不是XPath 的规则不对?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/500262/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Pytest

    1.pytest简介 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富; 2、支持参数化,可以细粒度地控制要测试的测…

    Python 2023年9月13日
    099
  • ScanNet数据集下载

    文章目录 前言 1.数据集介绍 2.数据集获取 3.导出数据集 前言 笔者CV小白选手获取ScanNet数据集是真的闹心,好在最后获取成功啦!这里将这两天获取数据集的详细过程记录一…

    Python 2023年8月3日
    0162
  • numpy.reshape及降低维度或升维的思考

    最近,由于程序最终需要涉及到保存数据,二维数据是可以直接可视化看到的。自己程序生成的是三维数据,需要保存成二维数据。 由此引发了对reshape的一些思考。 我的数据初始维度是(5…

    Python 2023年8月29日
    095
  • python-pandas 数据提取 笔记

    数据抽取 以列名(columns)和行名(index)作为参数.当只有一个参数时,默认是行名,即抽取整行数据,包括所有列。 以行和列位置索引(即:0,1,2…)作为参数…

    Python 2023年8月19日
    082
  • 基于FFmpeg的Java视频Mp4转GIF初探

    背景 在一些业务场景中,会有如下的一些要求:比如有用户需要将Mp4视频转为Gif动图。当然有一些小伙伴说可以使用系统截图,然后使用之前提到过的技术:GIF图像动态生成-JAVA后台…

    Python 2023年8月2日
    0100
  • 国内股票KDJ指标计算,Python实现KDJ指标计算,Talib实现KDJ指标计算

    0 引言 KDJ指标是最为常见的指标之一,股票每日的K线数据通过Tushare、Baostock等平台能够获取到个股及指数的Open、High、Low、Close、Volume等数…

    Python 2023年8月7日
    0322
  • python pandas处理csv表格(筛选,去重,分割,删除)

    本人没学过pandas,不过最近总处理一些csv文件,从网上查用法,总是忘记,所以今天记录一下这些常用的用法,以后再补pandas,写的很简陋,还请大家海涵,有不足的还请大佬指教 …

    Python 2023年8月7日
    0101
  • 纸牌博弈问题

    纸牌博弈问题 作者:Grey 原文地址: 博客园:纸牌博弈问题 CSDN:纸牌博弈问题 题目描述 有一个整型数组 A,代表数值不同的纸牌排成一条线。玩家 a 和玩家 b 依次拿走每…

    Python 2023年10月16日
    073
  • pandas之DataFrame对象基本知识总结

    基本的操作 Dataframe介绍:DataFrame是一种数据结构,它类似于一个二维数组,它与二维数组的不同在于它的内部数据不仅限于数值,还可以是其他的数据类型(布尔型,字符串等…

    Python 2023年8月8日
    0131
  • 【Python黑帽子】——搭建TCP端口扫描器

    作者名:Demo不是emo主页面链接:主页传送门创作初心: 一切为了她座右铭:不要让时代的悲哀成为你的悲哀专研方向:网络安全,数据结构每日emo: 唯有信仰与日月亘古不变 经过一段…

    Python 2023年11月5日
    069
  • 【BUUCTF】N1BOOK WEB WP

    持续更新… 文章目录 常见的搜集 粗心的小李 SQL注入-1 SQL注入-2 afr_1 afr_2 afr_3 SSRF Training 死亡ping命令 XSS闯…

    Python 2023年8月14日
    076
  • 天池数据-耳机情感分析

    import numpy as np import pandas as pd import matplotlib import matplotlib.pyplot as plt i…

    Python 2023年8月8日
    089
  • 安装fairseq和遇到版本不匹配问题的解决方法

    安装fairseq的时候报错如下: pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hos…

    Python 2023年9月8日
    0106
  • Python自动化测试详细总结系列篇

    推荐文章 很多小伙伴都发现了,用户自主「申请上首页」的按钮取消了,那博主们写的文章还有上首页曝光的机会吗?我们的回答是”当然有!!!”虽然我们取消了上首页申…

    Python 2023年5月24日
    096
  • python人工智能开发好找工作吗_学完Python真的能去做人工智能开发工程师吗? – 收获啦…

    小白学Python最苦恼的是路线怎么走,怎样才不会走弯路,这里分享一份Python+人工智能的学习方案及目标。感兴趣的可以看看。 第一阶段 Python核心编程 学习内容技术要点 …

    Python 2023年9月25日
    093
  • HC32L110(三) HC32L110的GCC工具链和VSCode开发环境

    目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110…

    Python 2023年10月23日
    0126
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球