PythonのWebクローラー・ノート(4) - 要求とBeautifulSoup

一、要求

リクエストは、情報ページを取得するために使用される要求のライブラリです。

まず、ああ、これはサードパーティのライブラリであるインポートライブラリに覚えて、Pyが所有していない、小さな会場を持っていないし、私の最後のパートナーができるサードパーティ製のライブラリのチュートリアルをインストール

import requests

我々はいくつかの一般的な機能の説明
1>を要求コマンド

import requests

url = 'https://www.163.com'
resp = requests.get(url)

実際には、ほとんどのコンストラクタで使用を取得し、それはここでは主に、URLと2つのヘッダを使用して、引数がたくさんあります。
URL:ああ、サイトをクロールするだけです......学んだことがない、メーターネットワークの性質を理解することを学びました。住所、右?(不正確な)それは実際にブラウザのアドレスボックスです。
これは
ヘッダ:リクエストヘッダ、時にはサイトは、抗登る、これはよりリアルに登るために追加することができますがあります。この場所は戻って話します。

2>ステータスコード

import requests

url = 'https://www.163.com'
resp = requests.get(url)
print(resp.status_code)
# >>200

状態をクロール撮影。200場合は成功を表します。

テキスト形式で3>表示情報

import requests

url = 'https://www.163.com'
resp = requests.get(url)
print(resp.status_code)
print(resp.text)

ここに画像を挿入説明
あなたが、私はChromeを使用し、F12キーをブラウザで表示することができ、これは実際にはページの源である、私はクロール網易ホームコンテンツを入れ、見ることができる
ここに画像を挿入説明
4>ディスプレイソース情報

import requests

url = 'https://www.163.com'
resp = requests.get(url)
print(resp.status_code)
print(resp.text)
html = resp.content

上のテキスト、テキスト形式を使用することで、我々は変数に格納されたコンテンツのメソッドを使用するHTML内に。

これらは、聞かせてのは、ソースコードを解析を開始、基本的な操作を要求されています。

二、BeautifulSoup

まずまたはインポートライブラリ

from bs4 import BeautifulSoup as bes

1は、最初にすべての私たちは形式にパースのhtmlする必要があることを缶BS4

from bs4 import BeautifulSoup as bes
soup = bes(html, 'html.parser')  # 转化为bs4能解析的格式

図2に示すように、位置決め要素

要素を見つけるために多くの方法がありますが、ここで私は、使いやすい、共通するいくつかの簡単なご紹介します。

モード1:soup.find(タグ名)
このメソッドは、最初に満足タグを返すために使用される(すなわち、タグ)


title = soup.find('title')
print(title)

ここに画像を挿入説明

モード2:soup.find_all(タグ名)
、これはラベルが友達を満たすすべてのリターンですが、結果がリストに表示されます。

比如我想找所有标签名为em的标签
ここに画像を挿入説明
那么:

em = soup.find_all('em')

for one in em:
    print(one)

结果:
ここに画像を挿入説明
方式3:CSS选择器
bs4还支持css选择器(啥是css不详细讲了),简单来说就是通过某种规则定位标签。

1> 通过标签名查找(木的特征)
首先最简单的,select也可以通过标签名查找。这个前面就不用加东西了。

t = soup.select('title')
print(t)

ここに画像を挿入説明

2> 用class定位元素 (特征是点(.))
我们现想提取“网易新闻”那个Tag
ここに画像を挿入説明

em1 = soup.select('.ntes-nav-app-newsapp')
print('em1:', em1)
print(type(em1))

ここに画像を挿入説明
可以看到,select返回的结果是一个set类,也就是说它可以找到所有满足条件的Tag

3> 用id属性定位 (特征是井号(#))
同样,我们还可以用id来定位。
ここに画像を挿入説明


em2 = soup.select('#js_N_nav')
print('em2:', em2)

4> 属性查找(特征是[ ])
还可以根据Tag内属性来查找ここに画像を挿入説明

em3 = soup.select('a[href="https://news.163.com"]')
print('em3:', em3)

查找< a >标签中herf属性为OOXX的标签
ここに画像を挿入説明
5> 嵌套定位

html网页源码其实是一个树形结构,那么我们就可以一层一层的定位查找。
ここに画像を挿入説明
我们通过分析层次,提取北京要问信息

a = soup.select('div.yaowen_news > div.news_bj_yw > ul > li > a')
for one in a:
    print(one, '\n')

ここに画像を挿入説明
emmm大家要注意身体啊,这肺炎挺严重的

首先认真分析源码,找出规律,再用上面几个方法组合起来使用,就可以得到想要的玩具标签了

3、提取内容

可以看到,我们所得到的信息中有好多乱七八糟的东西,我们想要的只是其中的内容罢了,这是我们就可以用get_text()来获取标签内容

a = soup.select('div.yaowen_news > div.news_bj_yw > ul > li > a')
c_list = []
for one in a:
    c_list.append(one.get_text())
for one in c_list:
    print(one)

我们把新闻标题存到了c_list里了

完工!

其实我觉得,爬虫这件事,三分看技术,七分看眼力,从不同中找相同,准确抓取自己想要的信息才是难点。

公開された21元の記事 ウォン称賛17 ビュー4212

おすすめ

転載: blog.csdn.net/xuanhuangwendao/article/details/104055232