PyQuery 中循环获取一段内容

Python 2016-09-14 02:18 2 条评论

最近在捣腾爬虫,比较习惯用 PyQuery 这个模块来解析 HTML 提取内容。简单看了一下文档,发现国内有些文档的写法是错的,自己试验了一下。

首先,循环一段内容比如循环我博客的文章标题,按照别人的文章来操作了一下发现是错误的。代码如下

import requests
from pyquery import PyQuery as pq
from lxml import etree

try:
    response = requests.get("http://www.d0cs.org/", timeout=5).text
    doc = pq(etree.fromstring(response))
    print type(doc('div#post-title>h1>a').text())
except Exception, e:
    print e

打印结果得到 <type 'str'> 类型,说明提取标题的时候实则是 str 类型,并不是 list 类型或者 PyQuery 对象,如果循环输出的话得不到我要的结果。大部分在一些 CSDN 博客之类的文章基本是这样。

而正确的写法是这样的

import requests
from pyquery import PyQuery as pq
from lxml import etree

try:
    response = requests.get("http://www.d0cs.org/", timeout=5).text
    doc = pq(etree.fromstring(response))
    for title in doc('div#post-title>h1>a').items():
        print title.text() + '\n'
except Exception, e:
    print e

这是查阅了官方 API 文档后操作的,不懂英文,还是要去看官方文档,起码有个翻译在。少走很多弯路的!

关于 PyQuery.items() 的文档

2 条评论
  1. zimeng
    zimeng

    我也遇到了同样的问题,很多资料都是重复是,甚至是错误的,导致无从下手。这个问题,我试着写了一段代码:

    #coding:utf-8

    import requests
    from pyquery import PyQuery as pq
    from lxml import etree

    url='http://www.d0cs.org/'
    doc=pq(url)
    title=doc('h1').text()
    print title

    好像可以解决,如果有不对的地方,敬请原谅。同时想请教关于pyquery获取元素的用法,有没有合适的资料?

    2017-04-24回复
    1. abj3ct10n
      abj3ct10n

      抱歉,最近比较忙才看到这个评论,担心你没有看到回复,我给你发了邮件。

      2017-05-21回复