Python爬虫補助利器PyQueryモジュールのインストールは攻略法を使います。
Windowsでのインストール:
ダウンロード先:https://pypi.python.org/pypi/pyquery/#downloads
ダウンロード後にインストール:
html文字列から情報を抽出する
urlまたはローカルhtmlファイルから情報を抽出する
もちろん、pyqueryも上記のような)文字列を解析するだけでなく、このようにすることができます。
pyqueryは私達に十分な便利さを提供して、いかなる元素の選択を行います。jqueryのようです。
pyqueryを利用して、豆板映画top 250をキャプチャします。
pyqueryの文法を見ました。実例を見て、豆瓣映画top 250をキャプチャします。
豆瓣の反爬虫類のひどい目のため、何回運行しても捕まらないです。まずrequestsでページをダウンロードして、直接にpyqueryを使ってページを分析する方法で情報を抽出します。
https://movie.douban.com/top250?start=0
startパラメータは0から、毎回25をプラスします。
https://movie.douban.com/top250?start=225
だから、サイクルを書いて、それらを全部捕まえてもいいです。
ダウンロード先: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ライブラリで、jqueryのような文法を使ってウェブページの中のいかなるデータを抽出することができます。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>
'''
d=pq(html)
print d('title') # css , html
print d('title').text() # text()
print d('#hi').text() # id , id
print d('p').filter('#hi2').text() # id class
print d('.class1') # class
print d('.class1').html() # html() html
print d('.class1').find('img').attr('src') # ,
print d('ul').find('li').eq(0).text() # html
print d('ul').children() #
print d('ul').children().eq(0) #
print d('img').parents() #
print d('#hi').next() #
print d('#hi').nextAll() #
print d('p').not_('#hi2') #
#
for i in d.items('li'):
print i.text()
print [i.text() for i in d.items('li')] #
print d.make_links_absolute(base_url='http://www.baidu.com') # html
上のコードセグメントは、pyqueryの一般的な動作方法を提供しています。私達はまずhtmlコードを定義して、pyqueryの一連の方法を使ってこのhtmlコードを操作して、主に特定の要素とテキストなどを取得します。もちろん、pyqueryは元素を取得するだけではなく、元素の属性を設定したり、元素を追加したりする機能もあります。私たちが最もよく使うのは上記のコードで使う方法です。ここでは他の方法を紹介しません。urlまたはローカルhtmlファイルから情報を抽出する
もちろん、pyqueryも上記のような)文字列を解析するだけでなく、このようにすることができます。
d = pq(url='http://www.baidu.com/')
私たちは直接にURLを読み込むことができます。上記の操作方法と何の違いもありません。この方法はデフォルトではurllibモジュールを使ってhttp要求を行いますが、もしあなたのシステムにrequestsがインストールされていたら、requestsを使ってhttp要求を行います。これはrequestsの任意のパラメータを使用することができます。
pq('http://www.baidu.com/', headers={'user-agent': 'pyquery'})
あるいは、あなたのローカルに既にファイルがあります。
d = pq(filename=path_to_html_file)
上记の书き方は直接に地元のhtmlファイルを指定しましたが、操作方法は上のと同じです。pyqueryは私達に十分な便利さを提供して、いかなる元素の選択を行います。jqueryのようです。
pyqueryを利用して、豆板映画top 250をキャプチャします。
pyqueryの文法を見ました。実例を見て、豆瓣映画top 250をキャプチャします。
豆瓣の反爬虫類のひどい目のため、何回運行しても捕まらないです。まずrequestsでページをダウンロードして、直接にpyqueryを使ってページを分析する方法で情報を抽出します。
from pyquery import PyQuery as pq
import requests
head_req = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
'Referer':'https://movie.douban.com/top250?start=0',
}
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('ol').find('li').html()
for data in d('ol').items('li'):
print data.find('.hd').find('.title').eq(0).text()
print data.find('.star').find('.rating_num').text()
print data.find('.quote').find('.inq').text()
print
運転してみます。結果を見てください。
9.6
。
9.4
。
9.4
。
9.4
。
9.5
。
9.2
, 。
9.4
, 。
9.2
, 。
9.3
, 。
9.2
。
9.1
。
9.1
, 。
9.2
, 。
9.2
。
9.1
, 。
9.1
。
9.2
, 。
9.2
Tomorrow is another day.
9.1
, , 。
8.9
。
9.0
, 。
9.0
, , , 。
9.1
。
3:
9.1
。
8.9
。
もちろんこれは最初のページの25本だけです。私たちはもう分かりました。https://movie.douban.com/top250?start=0
startパラメータは0から、毎回25をプラスします。
https://movie.douban.com/top250?start=225
だから、サイクルを書いて、それらを全部捕まえてもいいです。