Python クローラーがアメリカのドラマ Web サイトをクロール
私はいつもアメリカのテレビシリーズを見る習慣がありますが、一方では英語のリスニングスキルを練習することができ、他方では時間を潰すことができます。以前は動画サイトで視聴することができましたが、国家ラジオ映画テレビ総局による制限令が出てからは、以前のようにアメリカやイギリスの輸入ドラマが同時に更新されなくなったようです。しかし、オタクとして、ドラマを追いかけないわけにはいかないので、インターネットで検索したところ、Thunderを使用してダウンロードできるアメリカのドラマダウンロードサイト[Tiantian American Drama]を発見しました。さまざまなリソースを自由にダウンロードできます。 . 最近、BBC のハイビジョン ドキュメンタリーに夢中です。自然はとても美しいです。
ダウンロードできるリソース Web サイトを見つけましたが、毎回ブラウザを開いて URL を入力し、アメリカのドラマを見つけて、リンクをクリックしてダウンロードする必要があります。時間が経つと手続きが非常に面倒になり、Webサイトのリンクが開けなくなることもあり、ちょっと面倒です。私はたまたま Python クローラーを学習していたので、今日はウェブサイト上のすべてのアメリカのドラマのリンクを取得してテキスト ドキュメントに保存するクローラーを思いつきで書きました。ドラマが必要な場合は、リンクを開いて Xunlei にコピーするだけです。ダウンロードしてください。
実際、私は当初、URL を検索し、リクエストを使用してそれを開き、ダウンロード リンクを取得し、ホームページから始めてサイト全体をクロールするメソッドを作成する予定でした。ただし、重複リンクが多く、Web サイトの URL が思ったほど規則的ではありません。私が望むような分岐したクローラーをまだ書けていないのです。十分なので、これからも頑張ってください。 。 。
後から気づいたのですが、テレビシリーズへのリンクはすべて記事内にあり、記事の URL の後ろには http://cn163.net/archives/24016/ のように数字があったので、私が見つけたものを上手に使いました。クローラーの経験から、解決策は URL を自動的に生成することです。その後ろの番号は変更できませんか? また、それぞれのドラマには個性があるため、記事がどれくらいあるのかを調べてから使用しようとしました。 range 関数を使用して URL を直接生成します。
しかし、多くの URL は存在しないため、直接ハングアップします。心配しないでください。リクエストを使用しており、その組み込みの status_code は、リクエストによって返されるステータスを決定するために使用されます。コードは 404 です。これをスキップして他のリンクをクロールし、URL の問題を解決します。
以下は上記の手順の実装コードです。
def get_urls(self): try: for i in range(2015,25000): base_url='http://cn163.net/archives/' url=base_url+str(i)+'/' if requests.get(url).status_code == 404: continue else: self.save_links(url) except Exception,e: pass
後はネットで以前誰かが書いた同様のクローラーを見つけたのですが、1記事しかクロールできなかったので正規表現を拝借しました。 BeautifulSoupを使用しましたが、通常の方法ほど効果がなかったので、学習に制限はありません。ただし、その効果はそれほど理想的ではありません。リンクの約半分は正しくクロールできないため、引き続き最適化する必要があります。
# -*- coding:utf-8 -*- import requests import re import sys import threading import time reload(sys) sys.setdefaultencoding('utf-8') class Archives(object): def save_links(self,url): try: data=requests.get(url,timeout=3) content=data.text link_pat='"(ed2k://\|file\|[^"]+?\.(S\d+)(E\d+)[^"]+?1024X\d{3}[^"]+?)"' name_pat=re.compile(r'<h2 id="">(.*?)</h2>',re.S) links = set(re.findall(link_pat,content)) name=re.findall(name_pat,content) links_dict = {} count=len(links) except Exception,e: pass for i in links: links_dict[int(i[1][1:3]) * 100 + int(i[2][1:3])] = i#把剧集按s和e提取编号 try: with open(name[0].replace('/',' ')+'.txt','w') as f: print name[0] for i in sorted(list(links_dict.keys())):#按季数+集数排序顺序写入 f.write(links_dict[i][0] + '\n') print "Get links ... ", name[0], count except Exception,e: pass def get_urls(self): try: for i in range(2015,25000): base_url='http://cn163.net/archives/' url=base_url+str(i)+'/' if requests.get(url).status_code == 404: continue else: self.save_links(url) except Exception,e: pass def main(self): thread1=threading.Thread(target=self.get_urls()) thread1.start() thread1.join() if __name__ == '__main__': start=time.time() a=Archives() a.main() end=time.time() print end-start
完全版のコードもマルチスレッドを使用していますが、Python の GIL のせいで、20,000 以上のドラマが発生するようです。クロールが完了するまでに長い時間がかかりますが、URL エラーや URL の不一致を除けば、クロールの合計時間は 20 分未満です。当初は Redis を使用して 2 台の Linux マシンをクロールしたかったのですが、いろいろ考えた結果、それは不必要だと感じたのでそのままにして、後でさらにデータが必要になったときに実行することにしました。
このプロセス中に私を悩ませたもう 1 つの問題は、ファイル名の保存でした。txt テキスト形式のファイル名にはスペースを含めることができますが、スラッシュ、バックスラッシュ、括弧などを含めることはできません。これが問題で、最初はデータをクロールする際のエラーだと思いましたが、クロールされたドラマのタイトルにスラッシュが含まれていることがわかりました。惨めな。 。
アメリカのドラマ Web サイトをクローリングする Python クローラーに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

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

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
