ホームページ >バックエンド開発 >Python チュートリアル >Pythonのクローラー技術を使って恥ずかしい事大百科にクローリングする方法を詳しく解説
クローラー技術を学ぶのは初めてです。Zhihu で「恥ずかしいことの百科事典」にアクセスする方法についてのジョークを読んだので、自分でクローラーを作成することにしました。
目標を達成する: 1. 恥ずかしいこと百科事典のジョークまでクロールする
2. 毎回ジョークを登り、Enter キーを押すたびに次のページまでクロールする
技術的実装: python 実装に基づいて、次を使用します。ライブラリ、re ライブラリ、bs4 ライブラリの BeautifulSoup メソッドをリクエストして実現します
主な内容: まず第一に、クロール実装のアイデアを明確にする必要があります。メインの フレームワークを構築しましょう。最初のステップでは、まず Requests ライブラリを使用して Web ページを取得するメソッドを作成します。2 番目のステップでは、bs4 ライブラリの BeautifulSoup メソッドを使用して、取得した Web ページの情報を分析し、正規表現を使用して関連する段落と一致させます。情報。 3 番目のステップは、取得した情報を印刷することです。私たちは皆、メイン 関数 を通じて上記のメソッドを実行します。
まず、関連するライブラリをインポートします
import requests from bs4 import BeautifulSoup import bs4 import re
2番目、最初にWebページの情報を取得します
def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return ""
3、情報をrに入れて分析します
soup = BeautifulSoup(html,"html.parser")
必要なのは、ジョークのコンテンツと発行者です。 Web ページ ソース コードを表示すると、ジョークの発行者が
'p', attrs={'class': 'content'}中
であることがわかります。ジョークのコンテンツは
'p', attrs={'class': 'author clearfix'}中
にあります。そこで、bs4 ライブラリ メソッドを使用して、これら 2 つのタグ
def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'})
と の特定のコンテンツを抽出します。次に、特定の正規表現を使用してそれを取得します。 情報
for sp in a: patten = re.compile(r'<span>(.*?)</span>',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'<h2>(.*?)</h2>', re.S) d = re.findall(namePatten, str(mc)) li.append(d)
注意する必要があるのは、find_all メソッドと re findall メソッドがリストを返すことです。正規表現を使用する場合、タグ内の改行は削除されず、大まかに抽出されるだけです。追加する必要があるのは 2 だけです。リストの内容を結合して出力します
def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b)
次に、入力制御関数を作成します。Q を入力してエラーを返し、終了し、Enter を入力して正しい値を返し、次の段落ページをロードします。
def input_enter(): input1 = input() if input1 == 'Q': return False else: return Truemain関数で実装します 入力制御の場合、制御関数がエラーを返した場合は出力は行われませんが、制御関数が正しい値を返した場合は出力が継続されます。
for ループ
を通じて次のページを読み込みます。def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: breakここでは、ウェブページの段落コンテンツが毎回正しく出力されるように、for ループごとに lis[] と li[] が更新されることに注意する必要がありますソースコードは次のとおりです:
import requests from bs4 import BeautifulSoup import bs4 import re def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'}) for sp in a: patten = re.compile(r'(.*?)',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'初めての実行これはまだ最適化できるところがたくさんあるので、皆さんに指摘していただければと思います。(.*?)
', re.S) d = re.findall(namePatten, str(mc)) li.append(d) except: return "" return count def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b) def input_enter(): input1 = input() if input1 == 'Q': return False else: return True def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break main()
以上がPythonのクローラー技術を使って恥ずかしい事大百科にクローリングする方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。