热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:python解析HTML之:PyQuery库的介绍与使用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python解析HTML之:PyQuery库的介绍与使用相关的知识,希望对你有一定的参考价值。本篇大部分转载于https

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python解析HTML之:PyQuery库的介绍与使用相关的知识,希望对你有一定的参考价值。


本篇大部分转载于https://www.jianshu.com/p/c07f7cd1b548

先放自已自己解析techweb一个网站图片的代码


from pyquery import PyQuery as pq
headers
= {User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36}
def get_info(url):
html
= requests.get(url,headers =headers,verify=False)
d
= pq(html.content)
doc
= d("div").filter(".list_con")
doc
= doc("div").filter(".picture_text")
for tr in doc.items():
temp
=tr.find("img")
print(temp.attr("src"))
if __name__ == "__main__":
get_info(
"http://mi.techweb.com.cn/")

 




前言

Python关于爬虫的库挺多的,也各有所长。了解前端的也都知道, jQuery 能够通过选择器精确定位 DOM 树中的目标并进行操作,所以我想如果能用 jQuery 去爬网页那就 cool 了。

就搜了下看 Python 有没有与 DOM 相关的库什么的,还真找到了—— PyQuery


PyQuery简介

pyquery相当于jQuery的python实现,可以用于解析HTML网页等。它的语法与jQuery几乎完全相同,对于使用过jQuery的人来说很熟悉,也很好上手。

引用作者的原话就是:


“The API is as much as possible the similar to jquery.” 。



安装

使用 pip 或者 easy_install 都可以。
注意:由于 pyquery 依赖于 lxml ,要先安装 lxml ,否则会提示失败。



  1. 安装lxml:https://pypi.python.org/pypi/lxml/2.3/ (建议直接下载安装包,方便快捷);

  2. 安装pyquery:easy_install pyquery 或者pip install pyquery;

  3. 验证:输入 import pyquery 回车不报错即安装成功;


初始化

有 4 种方法可以进行初始化:
可以通过传入 字符串、lxml、文件 或者 url 来使用PyQuery。

from pyquery import PyQuery as pq
from lxml import etree
d = pq("")#传入字符串
d = pq(etree.fromstring(""))#传入lxml
d = pq(url=‘http://google.com/‘) #传入url
d = pq(filename=path_to_html_file) #传入文件

现在,d 就像 jQuery 中的 $ 一样了。


示例

通过一个简单的例子快速熟悉 pyquery 的用法,传入文件 example.html,内容如下:

<div>
<tr class="item-0">
<td>first sectiontd>
<td>1111td>
<td>17-01-28 22:51td>
tr>
<tr class="item-1">
<td>second sectiontd>
<td>2222td>
<td>17-01-28 22:53td>
tr>
div>

python 程序:

# -*- coding: utf-8 -*-
from pyquery import PyQuery as pq#引入 PyQuery
doc = pq(filename=‘example.html‘)# 传入文件 example.html
print doc.html() # html()方法获取当前选中的 html 块
print doc(‘.item-1‘) # 相当于 class 选择器,选取 class 为 item-1 的 html 块
data = doc(‘tr‘) # 选取 元素
for tr in data.items():# 遍历 data 中的 元素
temp = tr(‘td‘).eq(2).text() # 选取第3个 元素中的文本块
print temp

运行结果:

# print doc.html()
<tr class="item-0">
<td>first sectiontd>
<td>1111td>
<td>17-01-28 22:51td>
tr>
<tr class="item-1">
<td>second sectiontd>
<td>2222td>
<td>17-01-28 22:53td>
tr>
# print doc(‘.item-1‘)
<tr class="item-1">
<td>second sectiontd>
<td>2222td>
<td>17-01-28 22:53td>
tr>
# print tr(‘td‘).eq(2).text()
17-01-28 22:51
# print tr(‘td‘).eq(2).text()
17-01-28 22:53

操作

1、.html().text():获取相应的 HTML 块或者文本内容,

p=pq("")
print p(‘head‘).html()# 获取相应的 HTML 块
print p(‘head‘).text()# 获取相应的文本内容
‘‘‘输出:

Hello World!
‘‘‘

2、.(‘selector‘):通过选择器来获取目标内容,

d = pq("

test 1

test 2

")
print d(‘div‘).html()# 获取
元素内的 HTML 块
print d(‘#item-0‘).text()# 获取 id 为 item-0 的元素内的文本内容
print d(‘.item-1‘).text()# 获取 class 为 item-1 的元素的文本内容
‘‘‘输出:

test 1

test 2


test 1
test 2
‘‘‘

3、.eq(index):根据索引号获取指定元素(index 从 0 开始),

d = pq("

test 1

test 2

")
print d(‘p‘).eq(1).text()# 获取第二个 p 元素的文本内容,
‘‘‘输出
test 2
‘‘‘

4、.find():查找嵌套元素,

d = pq("

test 1

test 2

")
print d(‘div‘).find(‘p‘) # 查找
内的 p 元素
print d(‘div‘).find(‘p‘).eq(0) # 查找
内的 p 元素,输出第一个 p 元素
‘‘‘输出:

test 1

test 2


test 1


‘‘‘

5、.filter():根据 class、id 筛选指定元素,

d = pq("

test 1

test 2

")
print d(‘p‘).filter(‘.item-1‘) # 查找 class 为 item-1 的 p 元素
print d(‘p‘).filter(‘#item-0‘) # 查找 id 为 item-0 的 p 元素
‘‘‘输出:

test 2


test 1


‘‘‘

6、.attr():获取、修改属性值,

d = pq("

test 1

test 2

")
print d(‘p‘).attr(‘id‘) # 获取

标签的属性 id
print d(‘a‘).attr(‘class‘,‘new‘)# 修改
标签的 class 属性为 new
‘‘‘输出:
item-0
test 2
‘‘‘

7、其他操作:
.addClass(value):添加 class;
.hasClass(name):判断是否包含指定的 class,返回 True 或 False;
.children():获取子元素;
.parents():获取父元素;
.next():获取下一个元素;
.nextAll():获取后面全部元素块;
.not_(‘selector‘):获取所有不匹配该选择器的元素;
for i in d.items(‘li‘): print i.text():遍历 d 中的 li 元素;


结语

以上的操作对于日常爬取一些小数据资料,基本足够使用了。当然,PyQuery 还有很多其他内容,这里就不做说明了,如果需要了解更多关于 PyQuery 的内容的可以去查看官方文档。

官方文档是英文的,但也比较容易阅读和理解。我找到了一个中文的教程网站,这里也提供出来。

官方文档:https://pythonhosted.org/pyquery/index.html#
中文教程:http://www.geoinformatics.cn/lab/pyquery/















推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了正则表达式python相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • Python爬取豆瓣数据实现过程解析
    这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值, ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • 目录爬虫06scrapy框架1.scrapy概述安装2.基本使用3.全栈数据的爬取4.五大核心组件对象5.适当提升scrapy爬取数据的效率6.请求传参爬虫06scrapy框架1. ... [详细]
  • 博主使用代理IP来自于网上免费提供高匿IP的这个网站用到的库frombs4importBeautifulSoupimportrandomimporturllib.re ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 为什么三角形与菜单背景的颜色不同? - Why is the triangle a different colour shade to the menu background?
    Imnotunderstandingastowhythetrianglewhichappearswhenthemousehoversoverthemenuitem, ... [详细]
author-avatar
Sunshine5585
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有