我正在使用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页面如下:
我要提取的是href
div类中的a-row dealContainer dealTile
值
答案 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'])