【发布时间】:2016-11-25 04:17:26
【问题描述】:
我正在尝试抓取 youtube 水印元素 href 但我似乎无法抓取它。
如果我尝试
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find_all('a', {'class': 'ytp-watermark'})
entries = video_row.get('href')
return entries
我明白了
'ResultSet' object has no attribute 'get'
如果我尝试
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('a', {'class': 'ytp-watermark'})
entries = video_row.get('href')
return entries
我明白了
'NoneType' object has no attribute 'get'
如果我尝试
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('a', {'target': '_blank'})
entries = video_row.get('href')[24]
return entries
我得到一个字符
's'
如果我尝试
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('a', {'target': '_blank'})[24]
entries = video_row.get('href')
return entries
我明白了
24
如果我尝试
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('a', {'target': '_blank'})[24:]
entries = video_row.get('href')
return entries
我明白了
unhashable type: 'slice'
如果我尝试
def panties():
from lxml import html
pan_url = 'http://www.panvideos.com'
shtml = requests.get(pan_url, headers=headers)
soup = BeautifulSoup(shtml.text, 'html5lib')
video_row = soup.find_all('div', {'class': 'video'})
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('a', {'target': '_blank'})
entries = [{'text': div.get('href'),
} for div in video_row][24]
return entries
我明白了
'NavigableString' object has no attribute 'get'
如果我尝试
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find_all('a', {'class': 'ytp-title-link'})
entries = [{'text': div.get('href'),
} for div in video_row]
return entries
我明白了
[]
如果我使用 chrome 检查并将鼠标悬停在我得到的水印上
<a class="ytp-watermark yt-uix-sessionlink" target="_blank" aria-label="Watch on www.youtube.com" data-sessionlink="feature=player-watermark" href="https://www.youtube.com/watch?v=Xjww1pgKgnU" data-layer="7">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" height="100%" version="1.1" viewBox="0 0 77 34" width="100%">
........
</svg>
</a>
但如果我使用检查的搜索能力并输入 _blank 我会得到
<a class="ytp-title-link yt-uix-sessionlink" target="_blank" data-sessionlink="feature=player-title" href="https://www.youtube.com/watch?v=Xjww1pgKgnU">
<span class="ytp-title-playlist-icon" style="display: none;">
.....
</span>
<span>Packer Luther King Feat Mgp the Saw -BIEN MALA (Video Oficial)</span></a>
这些都没有返回结果。我的语法错了吗?任何帮助将不胜感激
这是我的全部功能
def panties():
from lxml import html
pan_url = 'http://www.panvideos.com'
shtml = requests.get(pan_url, headers=headers)
soup = BeautifulSoup(shtml.text, 'html5lib')
video_row = soup.find_all('div', {'class': 'video'})
def youtube_link(url):
youtube_page = requests.get(url, headers=headers)
soupdata = BeautifulSoup(youtube_page.text, 'html5lib')
video_row = soupdata.find('a', {'class': 'ytp-title-link yt-uix-sessionlink'})
entries = [{'text': div.get('href'),
} for div in video_row]
return entries
entries = [{'text': div.h4.text,
'href': div.a.get('href'),
'tube': youtube_link(div.a.get('href')),
} for div in video_row][:1]
return entries
它获取一个 url,使用该 url 作为获取详细信息页面的一种方式,并从该页面获取该信息并返回它。由于某种原因,链接被返回为无。如果我尝试 find all 或 find 它不会返回单个 a 元素。但是如果我寻找 h1 它会起作用。
编辑我尝试了不同的解析器
html.parser、lxml 和 html5lib
编辑:
我相信无法抓取数据,因为它来自媒体播放器。当我这样做时
video_row = soupdata.find_all('body')
我正在寻找的数据没有出现。所以这不是我,我不认为这是一个错误或任何无法通过正常方式获得的东西。链接标签元标签和其他一些标签无法抓取。
【问题讨论】:
-
如果
soupdata.find_all()返回[],则表示该元素在文档中不存在。也许水印是使用 JavaScript 动态添加的,在这种情况下它会出现在 Chrome 中,但不会出现在使用requests.get()下载的文档中。
标签: python django web-scraping beautifulsoup