目次
(.*?)
ホームページ バックエンド開発 Python チュートリアル Python クローラーがアメリカのドラマ Web サイトをクロール

Python クローラーがアメリカのドラマ Web サイトをクロール

Feb 27, 2017 am 10:24 AM
Python クローラー

私はいつもアメリカのテレビシリーズを見る習慣がありますが、一方では英語のリスニングスキルを練習することができ、他方では時間を潰すことができます。以前は動画サイトで視聴することができましたが、国家ラジオ映画テレビ総局による制限令が出てからは、以前のようにアメリカやイギリスの輸入ドラマが同時に更新されなくなったようです。しかし、オタクとして、ドラマを追いかけないわけにはいかないので、インターネットで検索したところ、Thunderを使用してダウンロードできるアメリカのドラマダウンロードサイト[Tiantian American Drama]を発見しました。さまざまなリソースを自由にダウンロードできます。 . 最近、BBC のハイビジョン ドキュメンタリーに夢中です。自然はとても美しいです。

Python クローラーがアメリカのドラマ Web サイトをクロール

ダウンロードできるリソース Web サイトを見つけましたが、毎回ブラウザを開いて URL を入力し、アメリカのドラマを見つけて、リンクをクリックしてダウンロードする必要があります。時間が経つと手続きが非常に面倒になり、Webサイトのリンクが開けなくなることもあり、ちょっと面倒です。私はたまたま Python クローラーを学習していたので、今日はウェブサイト上のすべてのアメリカのドラマのリンクを取得してテキスト ドキュメントに保存するクローラーを思いつきで書きました。ドラマが必要な場合は、リンクを開いて Xunlei にコピーするだけです。ダウンロードしてください。

Python クローラーがアメリカのドラマ Web サイトをクロール

実際、私は当初、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 サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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を入力してください...

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

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

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

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

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

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

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

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

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

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

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

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

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

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

See all articles