ホームページ バックエンド開発 Python チュートリアル 面白いページクローラーを作成するための python3

面白いページクローラーを作成するための python3

Feb 14, 2017 pm 01:37 PM

インターネット上の Python チュートリアルのほとんどはバージョン 2.X です。python3.X と比較すると、多くのライブラリの使用方法が大きく異なります。私は Python3 をインストールしました

。春節(なんて暇なんだ)、冗談を兼ねて簡単なプログラムを書き、プログラムを書く過程を記録してみました。私が初めてクローラーに出会ったのは、このような投稿を見たときでした。オムレットで女の子の写真をクロールするという面白い投稿でした。それで私は猫と虎の写真を自分で撮りました。

テクノロジーは未来にインスピレーションを与えます。プログラマーとして、どうしてそのようなことができるでしょうか?


面白いページクローラーを作成するための python3
0x02

腕まくりをして始める前に、まず理論的な知識を広めていきましょう。


簡単に言えば、Web ページ上の特定の場所にコンテンツをプルダウンする必要があります。どのようにプルダウンするか? まず、Web ページを分析して、必要なコンテンツを確認する必要があります。たとえば、今回は陽気な Web サイトのジョークをクロールしました。陽気な Web サイトのジョークのページを開くと、これらのコンテンツを取得することが目的です。読んでから落ち着いてください。こんなふうに笑っていたらコードは書けません。 Chrome では、「要素の検査」を開き、HTML タグをレベルごとに展開するか、小さなマウスをクリックして必要な要素を見つけます。


面白いページクローラーを作成するための python3
最後に、

の内容が必要なジョークであることがわかります。2 番目のジョークを見ると、同じことが当てはまります。したがって、この Web ページ内のすべての

を見つけて、その中のコンテンツを抽出すれば完了です。

0x03

さて、目的はわかったので、腕まくりをして始めましょう。ここでは python3 を使用します。python2 と python3 の選択については、実現できる機能は自由ですが、いくつかの違いがあります。ただし、依然として python3 を使用することをお勧めします。

必要なコンテンツをプルダウンしたいのですが、まずこの Web ページをプルダウンする必要があります。ここでは、urllib というライブラリを使用して Web 全体を取得する必要があります。ページ。

まず、urllibをインポートします


コードをコピーします

コードは次のとおりです:import urllib.requestをリクエストとしてインポートします

次に、リクエストを使用してWebページを取得できます


コピーcode

コードは次のとおりです: def getHTML(url):

return request.urlopen(url).read()


人生は短い、私は Python を使用します、1 行のコード、Web ページをダウンロードします、あなたは言いました、あるPython を使用しない理由はありません。

Web ページをダウンロードした後、Web ページを解析して必要な要素を取得する必要があります。要素を解析するには、Beautiful Soup という別のツールを使用する必要があります。これを使用すると、HTML と XML をすばやく解析して、必要な要素を取得できます。



コードをコピーします

コードは次のとおりです:soup = BeautifulSoup(getHTML("http://www.pengfu.com/xiaohua_1.html"))

BeautifulSoupを使用してWebページを解析する必要なのは 1 文だけですが、コードを実行すると、パーサーを指定するように求める警告が表示されます。そうしないと、他のプラットフォームまたはシステムでエラーが報告される可能性があります。


コードをコピーします

コードは次のとおりです:/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/bs4/__init__.py:181: UserWarning : パーサーが明示的に指定されていないため、このシステムで利用可能な最適な HTML パーサー (「lxml」) を使用しています。これは通常は問題ありませんが、このコードを別のシステムまたは別の仮想環境で実行する場合は問題ありません。 、別のパーサーが使用され、動作が異なる可能性があります。

この警告を引き起こしたコードは、joker.py ファイルの 64 行目にあります。この警告を取り除くには、次のようにコードを変更します。

BeautifulSoup([your markup])

これに:

BeautifulSoup([your markup], "lxml")

markup_type=markup_type))

パーサーの種類とさまざまなパーサー間の違いについては、公式ドキュメントで詳しく説明されています。現在でも、解析には lxml を使用する方が信頼性が高くなります。

変更後



コードをコピーします

コードは次のとおりです:soup = BeautifulSoup(getHTML("http://www.pengfu.com/xiaohua_1.html", 'lxml'))

このようにすると、上記の警告は表示されなくなります。


コードをコピーします コードは次のとおりです:

p_array =Soup.find_all('p', {'class':"content-img clearfix pt10relative"})

find_all関数を使用して、すべてのクラス = content-img clearfix pt10 相対 p タグを検索し、配列を走査します


コードをコピーします コードは次のとおりです:

p_array の x : content = x.string

このように、宛先 p の内容を取得します。この時点で、私たちは目標を達成し、冗談の範囲まで登りました。
ただし、同じようにクロールするとこのようなエラーが報告されます


コードをコピーしますコードは次のとおりです:

raise RemoteDisconnected("リモートエンドが接続を閉じました" http.client.RemoteDisconnected: Remote応答なしで接続を終了します

リモートエンドが応答していないと表示されます。リンクを閉じましたが、ネットワークを確認したところ問題はありませんでした。これは何が原因ですか?
パケットをキャプチャするために Charles をオンにしましたが、応答がありません。ああ、これは奇妙です。どうして、適切な Web サイトに Python ではアクセスできないのでしょうか? Charles を調べたところ、UA は urllib / を使用して開始されたリクエストに対してデフォルトで Python-urllib を使用していることがわかりました。 3.5 Chrome で UA にアクセスすると、User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS) になります。サーバーは、UA に基づいて Python クローラーを拒否するかどうかを判断します。偽装して試してみましょう。コードをコピーします。コードは次のとおりです。 -Agent:Mozilla/5.0 (Macintosh; Intel Mac OS .urlopen(req).read()

このようにして、Python を chrome に偽装して Yibai の Web ページを取得することで、スムーズにデータを取得することができます。
この時点で、Python を使用して Yibai と Pingdu.com をクロールするという冗談は終わりました。必要なのは、対応する Web ページを分析して興味のある要素を見つけ、Python の強力な機能を使用して目的を達成することだけです。 XXOOの写真でも、含蓄のあるジョークでも、ワンクリックでできます。詳しくは説明しませんが、女の子の写真をクリックして探します。

# -*- coding: utf-8 -*-
import sys
import urllib.request as request
from bs4 import BeautifulSoup

def getHTML(url):
  headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
  req = request.Request(url, headers=headers)
  return request.urlopen(req).read()

def get_pengfu_results(url):
  soup = BeautifulSoup(getHTML(url), 'lxml')
  return soup.find_all('p', {'class':"content-img clearfix pt10 relative"})

def get_pengfu_joke():
  for x in range(1, 2):
    url = 'http://www.pengfu.com/xiaohua_%d.html' % x
    for x in get_pengfu_results(url):
      content = x.string
      try:
        string = content.lstrip()
        print(string + '\n\n')
      except:
        continue
  return

def get_qiubai_results(url):
  soup = BeautifulSoup(getHTML(url), 'lxml')
  contents = soup.find_all('p', {'class':'content'})
  restlus = []
  for x in contents:
    str = x.find(&#39;span&#39;).getText(&#39;\n&#39;,&#39;<br/>&#39;)
    restlus.append(str)
  return restlus

def get_qiubai_joke():
  for x in range(1, 2):
    url = &#39;http://www.qiushibaike.com/8hr/page/%d/?s=4952526&#39; % x
    for x in get_qiubai_results(url):
      print(x + &#39;\n\n&#39;)
  return

if __name__ == &#39;__main__&#39;:
  get_pengfu_joke()
  get_qiubai_joke()
ログイン後にコピー

Python3 による陽気な Web ページ クローラーの制作と関連記事の詳細については、PHP 中国語 Web サイトに注目してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

See all articles