python使用漂亮的汤迭代多个标签

时间:2019-11-20 09:41:18

标签: python html beautifulsoup tags

我正在使用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

我要提取的是href div类中的a-row dealContainer dealTile

2 个答案:

答案 0 :(得分:0)

find仅返回符合给定条件的该Tag的第一个孩子。

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

如果要提取所有href,则需要使用for循环:

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

答案 1 :(得分:0)

使用速度更快的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'])
相关问题