我正在抓取一个html文件,每个页面上都有一个视频,并且在html中有视频ID。我要打印视频ID。
我知道,如果我想从div类打印标题,我会这样做
with open('yeehaw.html') as html_file:
soup = BeautifulSoup(html_file, 'lxml')
article = soup.find('div', class_='article')
headline = article.h2.a.text
print headline
但是,在id为'qe67234'的数据中找到了视频的ID 我不知道如何访问此“ qe67234”并打印出来。
请帮助谢谢!
答案 0 :(得分:0)
假设data-id的标签以div开头:
from bs4 import BeautifulSoup
import re
soup = BeautifulSoup('<div class="_article" data-id="qe67234"></div>')
results = soup.findAll("div", {"data-id" : re.compile(r".*")})
print('output: ', results[0]['data-id'])
# output: qe67234
答案 1 :(得分:0)
假设data-id位于div
BeautifulSoup.find返回找到的html元素作为字典。因此,您可以使用标准方法对其进行导航,以访问文本(如您在问题中所做的那样)以及html标签(如下面的代码所示)
soup = BeautifulSoup('<div class="_article" data-id="qe67234">')
soup.find("div", {"class":"_article"})['data-id']
请注意,视频元素通常需要JS才能播放,并且如果使用非JavaScript客户端(例如python requests
)抓取了视频,则可能找不到所需的元素。
如果发生这种情况,则必须使用phantomjs + selenium
浏览器之类的工具才能将网站与javascript结合起来进行抓取。
编辑
如果data-id
标签本身不是常量,则应查看lxml
库以替换BeautifulSoup
,并使用xpath
值查找所需的元素