Python爬虫補助利器PyQueryモジュールのインストールは攻略法を使います。

5484 ワード

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ライブラリで、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
だから、サイクルを書いて、それらを全部捕まえてもいいです。