詳細なデータを抽出する[爬虫類]はU11_BeautifulSoup4のpython3ライブラリ


以下のセクションで参照 に51job.com ケースプレゼンテーションの一部源、以下のすべてが抽出データにBeautifulSoup4ライブラリを解析するために、実際の事例に基づいています。
51job.com部における以下:(で使用されるソースコードに "前程无忧" コード少ない表します)

<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="120207510" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="python教师" href="https://jobs.51job.com/kunming-whq/120207510.html?s=01&t=0"  onmousedown="">
                python教师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南通识教育信息咨询有限公司" href="https://jobs.51job.com/all/co5751385.html">云南通识教育信息咨询有限公司</a></span>
    <span class="t3">昆明-五华区</span>
    <span class="t4">4.5-6千/月</span>
    <span class="t5">03-29</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="118417429" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python工程师" href="https://jobs.51job.com/kunming-whq/118417429.html?s=01&t=0"  onmousedown="">
                Python工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南蓝典科技股份有限公司" href="https://jobs.51job.com/all/co4646964.html">云南蓝典科技股份有限公司</a></span>
    <span class="t3">昆明-五华区</span>
    <span class="t4">4-6千/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="120703493" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="YX00-Python开发工程师" href="https://jobs.51job.com/kunming-gdq/120703493.html?s=01&t=0"  onmousedown="">
                YX00-Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南远信科技有限公司" href="https://jobs.51job.com/all/co2256249.html">云南远信科技有限公司</a></span>
    <span class="t3">昆明-官渡区</span>
    <span class="t4">4-8千/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="117230454" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python开发工程师" href="https://jobs.51job.com/kunming/117230454.html?s=01&t=0"  onmousedown="">
                Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南紫米科技有限公司" href="https://jobs.51job.com/all/co4672988.html">云南紫米科技有限公司</a></span>
    <span class="t3">昆明</span>
    <span class="t4">0.8-1万/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="117148016" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python高级开发工程师" href="https://jobs.51job.com/kunming-plq/117148016.html?s=01&t=0"  onmousedown="">
                Python高级开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="微加普惠金融服务(深圳)有限公司" href="https://jobs.51job.com/all/co5633133.html">微加普惠金融服务(深圳)有限公司...</a></span>
    <span class="t3">昆明-盘龙区</span>
    <span class="t4">1-2万/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="118740280" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Java/大数据/python 讲师" href="https://jobs.51job.com/kunming/118740280.html?s=01&t=0"  onmousedown="">
                Java/大数据/python 讲师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南新华计算机中等专业学校" href="https://jobs.51job.com/all/co3757091.html">云南新华计算机中等专业学校</a></span>
    <span class="t3">昆明</span>
    <span class="t4">0.5-1万/月</span>
    <span class="t5">03-27</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="104297888" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python开发工程师" href="https://jobs.51job.com/kunming-whq/104297888.html?s=01&t=0"  onmousedown="">
                Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云南创至互达网络科技有限公司" href="https://jobs.51job.com/all/co4670824.html">云南创至互达网络科技有限公司</a></span>
    <span class="t3">昆明-五华区</span>
    <span class="t4">0.6-1万/月</span>
    <span class="t5">03-19</span>
</div>
<div class="el">
    <p class="t1 ">
        <em class="check" name="delivery_em" onclick="checkboxClick(this)"></em>
        <input class="checkbox" type="checkbox" name="delivery_jobid" value="120456484" jt="0" style="display:none" />
        <span>
            <a target="_blank" title="Python开发工程师" href="https://jobs.51job.com/kunming/120456484.html?s=01&t=0"  onmousedown="">
                Python开发工程师                </a>
        </span>
                                                                </p>
    <span class="t2"><a target="_blank" title="云思华盛(北京)科技有限公司" href="https://jobs.51job.com/all/co2898169.html">云思华盛(北京)科技有限公司</a></span>
    <span class="t3">昆明</span>
    <span class="t4">10-15万/年</span>
    <span class="t5">03-14</span>
</div>

すべてのpタグを取得する1

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
ps = soup.find_all('p')
for p in ps:
    print(p)
    print("=" * 40)

Pは、上記のコード出力タグタイプであるが、bs4.elementインポートタグから、タグがこのクラスに入る、我々は以下の方法を見つけることができる:__repr__それは図から分かるように、この方法は、文字列要素を印刷することができアウト。

次のように図の出力結果は、次のとおりです。

最初の2個のpタグを取得します。2.

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
p = soup.find_all('p',limit=2)[1] # limit=2:最多提取2个标签
print(p)

次のように図の出力結果は、次のとおりです。

スパンのすべてのクラスは、T3に等しい取得3

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
spans = soup.find_all('span',class_='t3') # 此处使用class_,由于class是关键字
# 上述语句也可以使用attrs替换:spans = soup.find_all('span',attrs=({'class':"t3"}))
for span in spans:
    print(span)
    print("=" * 40)

4.取得クラス等しいチェック、EMタグ等しいdelivery_emの名前

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
# 错误的语法:emList = soup.find_all('em', class_="check" ,name="delivery_em" )
emList = soup.find_all('em', attrs = {'class':"check" ,'name':"delivery_em"} )
for em in emList:
    print(em)
    print("=" * 40)

使用している場合ここでは、emList = soup.find_all('em', class_="check" ,name="delivery_em" )それは、以下に説明する理由は次のとおりのfindAll()を直接パラメータ名として使用することはできません

5. PのタグT1におけるタグとしてすべてのhref属性クラスを取得

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
pList = soup.find_all('p',class_='t1')
for p in pList:
    aList = p.find_all('a')
    for a in aList:
        # 1)通过下标操作(推荐使用,语法简洁明了)
        href = a['href']
        print(href)
        print("=" * 40)

        # 2)通过attrs属性
        # href = a.attrs['href']
        # print(href)
        # print("=" * 40)

出力:

すべてのジョブ(テキスト)を取得します6。

html = "前程无忧"
soup = BeautifulSoup(html,'lxml')
divs = soup.find_all('div')[1:]
infoSet = list()
for div in divs:
    info = {}
    infos = list(div.stripped_strings) # div.stripped_strings返回的是一个生成器
    info['job'] = infos[0]
    info['company'] = infos[1]
    info['address'] = infos[2]
    info['salary'] = infos[3]
    info['ReleaseDate'] = infos[4]
    infoSet.append(info)
print(infoSet)

出力:

7.まとめ

7.1 find_allの使用

  • ラベルが抽出されると1、最初のラベルの名前です。あなたがラベルを抽出する際label属性フィルタを使用したい場合は、キーワード引数の形にすることができ、プロパティの名前とにおける転写プロセスで対応する値、または使用のattrsプロパティ、すべての属性と対応する値プット辞書に渡しますattrs
  • 2. limitプロパティは、抽出されたタグの数を制限します

7.2の違いを見つけて、find_all

  • 見つける:復帰の条件を満たすために最初のラベルを見つけます
  • find_all:リターン・ラベルのすべての条件を満たしています

7.3検索とfind_allフィルタ

  • キーワードパラメータ:のようなフィルタキーワードとプロパティの値をパラメータとして、キー値として属性の名前、:soup.find_all(「P」、クラス_ =「T1」)
  • ATTRSパラメータ:辞書に属性条件は、attrsに合格しました。例えば:soup.find_all( 'P'、ATTRS = { 'クラス': 'T1'})

ラベルの7.4取得プロパティ

  • 添字によって得られました
href = a['href']
  • ATTRSによって財産を取得
href = a.attrs['href']

7.5文字列とstripped_strings、文字列プロパティ、およびメソッドGET_TEXT

  • 文字列:文字列は、ラベルの下にラベルをオフに取得した文字列を返します。
  • 文字列:文字列は、ラベルの下にタグが付いていない人の息子を取得ジェネレータを返します。
  • ジェネレータを返すラベルの下に非タグ文字列の息子を取得し、それは空白文字を削除します、:stripped_strings。
  • GET_TEXT:ラベルに非タグ文字列の子孫を取得し、発電機として返されません。

おすすめ

転載: www.cnblogs.com/OliverQin/p/12595647.html