Pythonクローラーの一般的なコード

目次

Pythonクローラーの一般的なコード

Webファンデーション:

コアコードのリクエスト:

POST関連:

BeautifulSoup:


 

Webファンデーション:

応答ヘッダーのデータは、ブラウザー情報やCookieなど、ブラウザーからWebサイトに送信されるコンテンツです。

ステータス:見つかった場合、200の通常の418クローラーorz

(418の場合はパッケージが必要です(ユーザーエージェントの詳細は後で参照))

 

 

コアコードのリクエスト:

python3では、urllibはurllib2ライブラリと統合されており、urllibをインポートするだけです。

import urllib.request

response = urllib.request.urlopen("http://www.baidu.com")
print(response.read().decode("utf-8"))

デコードは、閲覧しやすいテキストにデコードできます。

 

 

POST関連:

一般的に使用される投稿のテストサイト:

httpbin.org

 

いくつかのデータテストを投稿します(バイトを使用してバイナリファイルに変換します)(実際のユーザーログイン(Cookie)をシミュレートします)

import urllib.request,urllib.parse

if __name__ == '__main__':
    data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
    response = urllib.request.urlopen("http://httpbin.org/post",data = data)
    print(response.read().decode("utf-8"))

 

urllib.error.URLErrorを除いてtry ...を使用することを忘れないでください:タイムアウトエラー処理を実装するために(一般的に使用されます) 

data = bytes(urllib.parse.urlencode({"hello": "world"}), encoding="utf-8")
    try:
        req = urllib.request.Request("http://douban.com", data=data, headers=headers, method="POST")
        response = urllib.request.urlopen(req)
        print(response.read().decode("utf-8"))
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)

 

アンチ418操作:(リクエストとレスポンスの組み合わせの例でもあります。リクエストを使用して、urlopenでリクエストインスタンスを取得します)

headers = {  #模拟浏览器头部信息 向豆瓣服务器发送消息
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36" #from your browser
}

data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
    req = urllib.request.Request("http://douban.com",data = data,headers = headers, method = "POST")
    response = urllib.request.urlopen(req)
    print(response.read().decode("utf-8"))

 

 

BeautifulSoup:

機能:複雑なHTMLドキュメントを複雑なツリー構造に変換します。各ノードはPythonオブジェクトであり、すべてのオブジェクトは4つのタイプに要約できます。

(htmlタグとコンテンツを検索するための強力なツールで、大量の検索作業を回避します)

-タグタグ

--NavigableString

--BeautifulSoup

- コメント

 

基本的な例:

from bs4 import BeautifulSoup

file = open("baidu.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser")


print(bs.a)# get tag
print(bs.title.string) # get string inside tag
print(bs.a.attrs) # get attrs inside tag

一般的な検索機能:

bs.find_all("a") # 完全匹配
bs.find_all(re.compile("a")) # 正则匹配
bs.find_all(id = "head") # 寻找id为head的标签


# 方法搜索: 传入一个函数,根据函数的要求来搜索
def rules():
    return tag.has_attr("name")
bs.find_all(rules)

tlist = bs.select('title') # 通过标签来查找
tlist = bs.select('.mnav') # 通过类名来查找(# id)
tlist = bs.select('head > title') # 查找子标签
tlist = bs.select('.manv ~ .bri') # 查找兄弟标签
# 获取该文本的方法
print(tlist[0].get_text())

 

 

おすすめ

転載: blog.csdn.net/ShuoCHN/article/details/112389441