【问题标题】:python iterate multiple tags using beautiful souppython使用漂亮的汤迭代多个标签
【发布时间】:2020-03-15 23:32:25
【问题描述】:

我正在使用 python 3,我想做的是分析 HTML 页面并从特定标签中提取一些信息。 此操作必须多次执行。要获取 HTML 页面,我正在使用 beautifulsoup 模块,我可以通过这种方式正确获取 html 代码:

import urllib.request as req
import bs4

url = 'http://myurl.com'
reqq = req.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
reddit_file = req.urlopen(reqq)
reddit_data = reddit_file.read().decode('utf-8')
soup = bs4.BeautifulSoup(reddit_data, 'lxml')

我的html结构如下:

<div class="first_div" id="12345">
  <div class="second_div">
    <div class="third_div">
        <div class="fourth_div">
            <div class="fifth_div">
                <a id="dealImage" class="checked_div" href="http://www.myurl.com/">

我要提取的是href 值,所以http://www.myurl.com/

我尝试像这样使用 find() 函数,它可以工作:

div = soup.find("div", {"class" : "first_div"})

但如果我尝试直接找到第二个 div:

div = soup.find("div", {"class" : "second_div"})

返回空值

谢谢

编辑:

源html页面如下:

查看源代码:https://www.amazon.it/gp/goldbox/ref=gbps_ftr_s-5_2d1d_page_1?gb_f_deals1=dealTypes:LIGHTNING_DEAL%252CBEST_DEAL%252CDEAL_OF_THE_DAY,sortOrder:BY_SCORE&pf_rd_p=82dc915a-4dd2-4943-b59f-dbdbc6482d1d&pf_rd_s=slot-5&pf_rd_t=701&pf_rd_i=gb_main&pf_rd_m=A11IL2PNWYJU7H&pf_rd_r=5Q5APCV900GSWS51A6QJ&ie=UTF8

我必须从a-row dealContainer dealTile div 类中提取href 值

【问题讨论】:

  • find 仅返回符合给定条件的此标记的第一个子项。
  • 但findAll 提取与给定条件匹配的标记对象列表。您可以指定标签的名称以及您希望标签具有的任何属性。
  • 您试图从该链接中提取的真实网址是什么?

标签: python html beautifulsoup tags


【解决方案1】:

find 仅返回此标记的第一个符合给定条件的子标记。

但findAll 提取与给定条件匹配的标记对象列表。您可以指定标签的名称以及您希望标签具有的任何属性。

这里如果要提取所有href所以需要使用for循环:

href = soup.findAll("div", {"class" : "first_div"})
for item in href:
    print(img.get('href'))

【讨论】:

  • 所以您需要直接分享 html 源代码或链接才能为您提供帮助。
【解决方案2】:

使用更快的 Css 选择器。

from bs4 import BeautifulSoup

reddit_data='''<div class="first_div" id="12345">
  <div class="second_div">
    <div class="third_div">
        <div class="fourth_div">
            <div class="fifth_div">
                <a id="dealImage" class="checked_div" href="http://www.myurl.com/">
                </div>
                </div>
                </div>
                </div>
                </div>'''
soup = BeautifulSoup(reddit_data, 'lxml')
for item in soup.select(".first_div a[href]"):
    print(item['href'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2020-02-13
    • 2012-12-27
    • 2015-05-03
    • 2016-06-02
    相关资源
    最近更新 更多