python pyquery不能有空格吗

python pyquery不能有空格吗,第1张

看地方吧

pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的。今天重新看了一遍整个文档,把它的一些使用方法整理了一下,做个记录。

使用方法

from pyquery import PyQuery as pq

1可加载一段HTML字符串,或一个HTML文件,或是一个url地址,

例:

d=pq("<html><title>hello</title></html>")

d=pq(filename=path_to_html_file)

d=pq(url='')注意:此处url似乎必须写全

2html()和text() ——获取相应的HTML块或文本块,

例:

p=pq("<head><title>hello</title></head>")

p('head')html()#返回<title>hello</title>

p('head')text()#返回hello

3根据HTML标签来获取元素

例:

d=pq('<div><p>test 1</p><p>test 2</p></div>')

d('p')#返回[<p>,<p>]

print d('p')#返回<p>test 1</p><p>test 2</p>

print d('p')html()#返回test 1

注意:当获取到的元素不只一个时,html()、text()方法只返回首个元素的相应内容块

4eq(index) ——根据给定的索引号得到指定元素

接上例,若想得到第二个p标签内的内容,则可以:

print d('p')eq(1)html() #返回test 2

5filter() ——根据类名、id名得到指定元素,例:

d=pq("<div><p id='1'>test 1</p><p class='2'>test 2</p></div>")

d('p')filter('#1') #返回[<p#1>]

d('p')filter('2') #返回[<p2>]

6find() ——查找嵌套元素,例:

d=pq("<div><p id='1'>test 1</p><p class='2'>test 2</p></div>")

d('div')find('p')#返回[<p#1>, <p2>]

d('div')find('p')eq(0)#返回[<p#1>]

7直接根据类名、id名获取元素,例:

d=pq("<div><p id='1'>test 1</p><p class='2'>test 2</p></div>")

d('#1')html()#返回test 1

d('2')html()#返回test 2

8获取属性值,例:

d=pq("<p id='my_id'><a href=''>hello</a></p>")

d('a')attr('href')#返回

d('p')attr('id')#返回my_id

9修改属性值,例:

d('a')attr('href', '')把href属性修改为了baidu

10addClass(value) ——为元素添加类,例:

d=pq('<div></div>')

daddClass('my_class')#返回[<divmy_class>]

11hasClass(name) #返回判断元素是否包含给定的类,例:

d=pq("<div class='my_class'></div>")

dhasClass('my_class')#返回True

12children(selector=None) ——获取子元素,例:

d=pq("<span><p id='1'>hello</p><p id='2'>world</p></span>")

dchildren()#返回[<p#1>, <p#2>]

dchildren('#2')#返回[<p#2>]

13parents(selector=None)——获取父元素,例:

d=pq("<span><p id='1'>hello</p><p id='2'>world</p></span>")

d('p')parents()#返回[<span>]

d('#1')parents('span')#返回[<span>]

d('#1')parents('p')#返回[]

14clone() ——返回一个节点的拷贝

15empty() ——移除节点内容

16nextAll(selector=None) ——返回后面全部的元素块,例:

d=pq("<p id='1'>hello</p><p id='2'>world</p><img scr='' />")

d('p:first')nextAll()#返回[<p#2>, <img>]

d('p:last')nextAll()#返回[<img>]

17not_(selector) ——返回不匹配选择器的元素,例:

d=pq("<p id='1'>test 1</p><p id='2'>test 2</p>")

d('p')not_('#2')#返回[<p#1>]

pyquery还有其他一些用法,这里没有一一整理出来,更多更全的方法可以直接去看它的文档。

Python下的爬虫库,一般分为3类。

抓取类

urllib(Python3),这是Python自带的库,可以模拟浏览器的请求,获得Response用来解析,其中提供了丰富的请求手段,支持Cookies、Headers等各类参数,众多爬虫库基本上都是基于它构建的。建议学习了解一下,因为有些罕见的问题需要通过底层的方式解决。

requests,基于urllib,但是更方便易用。强烈推荐掌握。

解析类

re:正则表达式官方库,不仅仅是学习爬虫要使用,在其他字符串处理或者自然语言处理的过程中,这是绕不过去的一个库,强烈推荐掌握。

BeautifulSoup:方便易用,好上手,推荐掌握。通过选择器的方式选取页面元素,并获取对应的内容。

lxml:使用

lxmletree

将字符串转换之后,我们可以使用XPath表达式来解析网页,终极推荐。XPath对于网页解析的支持非常强大,而且很容易上手。它本来是设计出来进行XML元素选择的,但是它同样支持HTML。

pyquery:另一个强大的解析库,感兴趣的可以学习下。

综合类

selenium:所见即所得式爬虫,综合了抓取和解析两种功能,一站式解决。很多动态网页不太容易通过requests、scrapy直接抓取,比如有些url后边带了加密的随机数,这些算法不太好破解,这种情况下,只能通过直接访问网址、模拟登陆等方式请求到页面源码,直接从网页元素中解析内容,这种情况下,Selenium就是最好的选择。不过Selenium最初设计出来,是用于测试的。强烈推荐。

scrapy:另一个爬虫神器,适合爬取大量页面,甚至对分布式爬虫提供了良好的支持。强烈推荐。

以上这些是我个人经常使用的库,但是还有很多其他的工具值得学习。比如Splash也支持动态网页的抓取;Appium可以帮助我们抓取App的内容;Charles可以帮助我们抓包,不管是移动端还是PC网页端,都有良好的支持;pyspider也是一个综合性的框架;MySQL(pymysql)、MongoDB(pymongo),抓到了数据就要存储,数据库也是绕不过去的。

掌握了以上这些,基本上大部分的爬虫任务都难不倒你啦!

Python 中可以进行网页解析的库有很多,常见的有 BeautifulSoup 和 lxml 等。在网上玩爬虫的文章通常都是介绍 BeautifulSoup 这个库,我平常也是常用这个库,最近用 Xpath 用得比较多,使用 BeautifulSoup 就不大习惯,很久之前就知道 Reitz 大神出了一个叫 Requests-HTML 的库,一直没有兴趣看,这回可算歹着机会用一下了。

使用 pip install requests-html 安装,上手和 Reitz 的其他库一样,轻松简单:

这个库是在 requests 库上实现的,r 得到的结果是 Response 对象下面的一个子类,多个一个 html 的属性。所以 requests 库的响应对象可以进行什么 *** 作,这个 r 也都可以。如果需要解析网页,直接获取响应对象的 html 属性:

不得不膜拜 Reitz 大神太会组装技术了。实际上 HTMLSession 是继承自 requestsSession 这个核心类,然后将 requestsSession 类里的 requests 方法改写,返回自己的一个 HTMLResponse 对象,这个类又是继承自 requestsResponse,只是多加了一个 _from_response 的方法来构造实例:

之后在 HTMLResponse 里定义属性方法 html,就可以通过 html 属性访问了,实现也就是组装 PyQuery 来干。核心的解析类也大多是使用 PyQuery 和 lxml 来做解析,简化了名称,挺讨巧的。

元素定位可以选择两种方式:

方法名非常简单,符合 Python 优雅的风格,这里不妨对这两种方式简单的说明:

定位到元素以后势必要获取元素里面的内容和属性相关数据,获取文本:

获取元素的属性:

还可以通过模式来匹配对应的内容:

这个功能看起来比较鸡肋,可以深入研究优化一下,说不定能在 github 上混个提交。

除了一些基础 *** 作,这个库还提供了一些人性化的 *** 作。比如一键获取网页的所有超链接,这对于整站爬虫应该是个福音,URL 管理比较方便:

内容页面通常都是分页的,一次抓取不了太多,这个库可以获取分页信息:

结果如下:

通过迭代器实现了智能发现分页,这个迭代器里面会用一个叫 _next 的方法,贴一段源码感受下:

通过查找 a 标签里面是否含有指定的文本来判断是不是有下一页,通常我们的下一页都会通过 下一页 或者 加载更多 来引导,他就是利用这个标志来进行判断。默认的以列表形式存在全局: ['next','more','older'] 。我个人认为这种方式非常不灵活,几乎没有扩展性。 感兴趣的可以往 github 上提交代码优化。

也许是考虑到了现在 js 的一些异步加载,这个库支持 js 运行时,官方说明如下:

使用非常简单,直接调用以下方法:

第一次使用的时候会下载 Chromium,不过国内你懂的,自己想办法去下吧,就不要等它自己下载了。render 函数可以使用 js 脚本来 *** 作页面,滚动 *** 作单独做了参数。这对于上拉加载等新式页面是非常友好的。

Golang如何解析Html代码

用Golang的朋友都知道如果我们要从HTML中提取一些内容、比如title或者是h2在或者是一些其他的HTML的内容、在Golang里面我们如果要自己写代码来提取还是相当的麻烦的;

由于我之前在写Pyhon的爬虫的时候也需要解析HTML标签;所以用过PyQuery和BS4这次在用Golang写爬虫的时候就留意了一下是否有Golang版本的Query。github是个好地方;上面很找到很多开源的代码可以用;包括GoQuery。

所以这次会介绍一下如何用GoQuery来解析HTML元素。

导入Goquery模块

package mainimport ( "fmt" "githubcom/opesun/goquery")其实还有一个githubcom/PuerkitoBio/goquery的goquery模块、但是配置环境经常出差就没有选择

Goquery的各种用法

goquery有Jquery的大部分特性;如果你熟悉Jquery的话用Goquery就很简单了

解析HTML的title

var url = ">

以上就是关于python pyquery不能有空格吗全部的内容,包括:python pyquery不能有空格吗、Python什么爬虫库好用、Python网页解析库:用requests-html爬取网页等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10150254.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存