ホームページ  >  記事  >  バックエンド開発  >  Python クローラー補助ツール PyQuery モジュールのインストールと使い方ガイドの紹介

Python クローラー補助ツール PyQuery モジュールのインストールと使い方ガイドの紹介

高洛峰
高洛峰オリジナル
2017-03-04 16:04:001743ブラウズ

この記事では、Python クローラー補助ツールである PyQuery モジュールのインストールと使用ガイドを主に紹介します。PyQuery は、HTML コンテンツの解析に簡単に使用できるため、必要とする友人が参照できます

Windows インストール先:
ダウンロード アドレス: https://pypi.python.org/pypi/pyquery/#downloads

ダウンロード後にインストール:


C:\Python27>easy_install E:\python\pyquery-1.2.4.zip


直接インストールすることもできますオンライン:


C:\Python27>easy_install pyquery


pyquery は、jquery に似た Python ライブラリで、Web ページ内の任意のデータを抽出できます。これは、HTML のデータ抽出とマイニングに非常に優れたサードパーティです。ウェブページ。 pyqueryの使い方を見てみましょう。

HTML文字列から情報を抽出する


#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from pyquery import PyQuery as pq
html = '''
<html>
<head>
 <title>this is title</title>
</head>
<body>
 <p id="hi">Hello, World</p>
 <p id="hi2">Nihao</p>
 <div class="class1">
  <img src="1.jpg" />
 </div>
 <ul>
  <li>list1</li>
  <li>list2</li>
 </ul>
</body>
</html>
&#39;&#39;&#39;
d=pq(html)
 
print d(&#39;title&#39;) # 相当于css选择器,根据html标签获取元素
print d(&#39;title&#39;).text() # text()方法获取当前选中的文本块
 
print d(&#39;#hi&#39;).text() # 相当于id选择器,直接根据id名获取元素
print d(&#39;p&#39;).filter(&#39;#hi2&#39;).text() # 可以根据id或class得到指定元素
print d(&#39;.class1&#39;) # 相当于class选择器
print d(&#39;.class1&#39;).html() # html()方法获取当前选中的html块
print d(&#39;.class1&#39;).find(&#39;img&#39;).attr(&#39;src&#39;) # 查找嵌套元素,并选中属性
print d(&#39;ul&#39;).find(&#39;li&#39;).eq(0).text() # 根据索引号获取多个相同html元素中的某一个
print d(&#39;ul&#39;).children() # 获取所有子元素
print d(&#39;ul&#39;).children().eq(0) #根据索引获取子元素
print d(&#39;img&#39;).parents() # 获取父元素
print d(&#39;#hi&#39;).next() # 获取下一个元素
print d(&#39;#hi&#39;).nextAll() #获取后面全部元素块
print d(&#39;p&#39;).not_(&#39;#hi2&#39;) # 返回不匹配选择器的元素
# 遍历所有匹配的元素
for i in d.items(&#39;li&#39;):
 print i.text()
print [i.text() for i in d.items(&#39;li&#39;)] # 遍历用于列表推倒
print d.make_links_absolute(base_url=&#39;http://www.baidu.com&#39;) # 把html文档中的相对路径变为绝对路径


上記のコードスニペットは、一般的に使用されるpyqueryの操作メソッドを示しています。まず HTML コードを定義し、次に pyquery の一連のメソッドを使用して HTML コードを操作し、主に特定の要素とテキストを取得しました。もちろん、pyquery は要素を取得するだけでなく、要素の属性を設定したり、要素を追加したりすることもできます。最も一般的に使用されるメソッドは上記のコードで使用されているメソッドであるため、ここでは他のメソッドは紹介しません。

URL またはローカル HTML ファイルから情報を抽出します

もちろん、pyquery は上記のような HTML 文字列を解析できるだけでなく、次のようにすることもできます:

d = pq(url=&#39;http://www.baidu.com/&#39;)

URL を直接ロードすることもできますが、これは URL と同じではありません。上記の操作方法に違いはありません。このメソッドは、デフォルトで urllib モジュールを使用して http リクエストを作成しますが、リクエストがシステムにインストールされている場合、リクエストは http リクエストの作成に使用されます。つまり、次のようなリクエストのパラメータを使用できます。

pq(&#39;http://www.baidu.com/&#39;, headers={&#39;user-agent&#39;: &#39;pyquery&#39;})

または、対応する HTML ファイルが既にローカル領域にある場合は、次のこともできます:

d = pq(filename=path_to_html_file)

上記の記述方法はローカル HTML ファイルを直接指定しており、操作方法は上記と同じです。

ご覧のとおり、pyquery は、jquery と同様に、任意の要素を選択するための完全な利便性を提供します。

pyquery を使用して上位 250 の Douban ムービーをキャプチャする

pyquery の構文を読んだ後、上位 250 の Douban ムービーをキャプチャする例を見てみましょう。

Douban のアンチクローラーは非常に強力なので、数回実行してもキャッチできませんでした。最初にリクエストを使用してページをダウンロードし、pyquery を直接使用してページを分析して情報を抽出する必要がありました。

実行して結果を確認します:

from pyquery import PyQuery as pq
import requests
 
head_req = {
 &#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36&#39;,
 &#39;Referer&#39;:&#39;https://movie.douban.com/top250?start=0&#39;,
 
}
r=requests.get("https://movie.douban.com/top250?start=0",headers=head_req)
with open("1.html","wb") as html:
 html.write(r.content)
 
d=pq(filename="1.html")
 
# print d(&#39;ol&#39;).find(&#39;li&#39;).html()
for data in d(&#39;ol&#39;).items(&#39;li&#39;):
 print data.find(&#39;.hd&#39;).find(&#39;.title&#39;).eq(0).text()
 print data.find(&#39;.star&#39;).find(&#39;.rating_num&#39;).text()
 print data.find(&#39;.quote&#39;).find(&#39;.inq&#39;).text()
 print

もちろん、これは最初のページの 25 項目だけです。トップ 250 の Douban ムービーの URL は

https://movie. douban.com/top250?start=0
パラメータを 0 から開始し、

https://movie.douban.com/top250?start=225
まで毎回 25 を追加します。したがって、すべてをキャッチするループを作成できます。

Python クローラー補助ツール PyQuery モジュールのインストールと使用ガイドの詳細については、PHP 中国語 Web サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。