爬虫類の学習 (05): データ分析_bs4 の記事

1. bs4モジュールの紹介

  1. 機能: ソースコード上で実行します数据解析
  2. インストール: ローカルターミナルに移動し、次のコードを入力してインストールします。
pip install bs4  # BeautifulSoup
  1. ガイドパッケージ:
#  使用BeautifulSoup的模块的时候需要导入模块
from bs4 import BeautifulSoup
  1. についてbs4:基本的に、名前から
    2 つのことがわかりますfind。1 つは、もう 1 つは ですfind_all查找一个查找所有
  • find: ページ内の結果を検索し、見つかった場合は返します。
  • find_all: ページ内の多数の結果を検索し、( 列表)のみを返します。
  • これら 2 つの関数には相同的参数構造があります。1 つだけ学習してください。
#  伪代码
find(标签, attrs={
    
    属性:})
  1. アプリケーション シナリオ:
    xml (カスタム マークアップ言語)、svg

2、BS4実戦

1. 壁紙 Web サイトから壁紙をクロールします。

'''
需求:爬取网站上的桌面壁纸(点进去后的高清壁纸)
需要点击图片下面的文字(超链接) -> 进入到子页面中获取图片下载地址
'''
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin  # 专门用于网站路径拼接
headers = {
    
    
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
    }
def get_source(url):

    resp = requests.get(url, headers=headers)
    resp.encoding = 'gb2312'
    return resp.text

def data_parse(resp):
    #  直接把页面源代码塞进去,html.parser是html解析器
    main_page = BeautifulSoup(resp, 'html.parser')
    #  观察页面源代码可以发现,需要的数据全在ul标签下,所以先定位到ul
    #  需要注意的是class='pic-list2  clearfix',选择class中其中一个就可以了
    ul = main_page.find('ul', attrs={
    
    'class': 'clearfix'})
    #  拿到所有的a标签(其中包含超链接)
    #  findall返回的是一个列表
    a = ul.find_all('a', attrs={
    
    'class': 'pic'})
    return a

def download_img(a, url):
    #  1. 首先需要获取到每个a中的href值
    #  想要从bs4里面拿到某一个标签的某一个属性 用get
    for i in a:
        # i.text  # 获取i
        # 标签中间的文字
        href = i.get('href')
        # print(href)
        #  前面两个href是以exe结尾的,是网站携带的网站,所以需要去掉
        if href.endswith('exe'):
            continue
        #  拼接url,获取到真正的url
        href = urljoin(url, href)
        child_resp = requests.get(href, headers=headers)
        child_page = BeautifulSoup(child_resp.text, 'html.parser')
        src = child_page.find('img', attrs={
    
    'id': 'bigImg'}).get('src')
        # print(src)
        resp_img = requests.get(src, headers=headers)
        file_name = src.split('/')[-1]
        file_path = f'练习/{
      
      file_name}'
        #  下载图片
        with open(file_path, mode='wb') as f:
            f.write(resp_img.content)
            print(f'{
      
      file_name}下载成功!!!')


if __name__ == '__main__':
    url = 'https://desk.zol.com.cn/pc/'
    #  1. 获取页面源代码
    resp = get_source(url)
    #  2. 数据解析
    a = data_parse(resp)
    #  3. 通过子链接下载图片
    download_img(a, url)

2. bs4でのcssセレクターの適用

について选择器. ここでは 2 つの関数について説明します。

  1. select_one(セレクター) 选择器HTML ドキュメント内のタグを取得するために使用します。
  2. select(セレクター) 选择器HTML ドキュメント内のタグを取得するために使用します。
'''需求:和01一样'''
import requests
from bs4 import BeautifulSoup
url = 'https://desk.zol.com.cn/pc/'
headers = {
    
    
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
resp = requests.get(url, headers)
resp.encoding = 'gbk'
main_page = BeautifulSoup(resp.text,'html.parser')
# main_page.select(css选择器) # 选一堆
# main_page.select_ont(css选择器) # 选一个

# 根本目标:拿到每个详情页的url地址 -> a
a_list = main_page.select(".photo-list-padding > a")
for a in a_list:
    href = a.get('href')
    print(href)

3.bs4の概要

  1. 应用场景xmlデータまたはテキストの解析はsvg、他の 2 つの解析方法よりも便利です
  2. そしてxpath同様に、最初に行う必要もあります解析页面源代码
  3. bs4find() と find_all() で覚えておく必要がある操作は 2 つだけです
  4. bs4それを取り込む- 属性> 标签名.get(プロパティ名) -> ->a.get(href) ハイパーリンクの子urlアドレスを取得
  5. bs4フェッチイン- text文本>标签名.text

おすすめ

転載: blog.csdn.net/m0_48936146/article/details/127455224