能否使用beautifulsoup隐藏爬取时的a标签?

2024-03-28 23:09:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的网站检查中发现了这个

<a data-bind="attr: { 'href': bandURL }, text: artist, click: playMe"  
class="item-artist" href="https://bogseyandtheargonauts.bandcamp.com?
from=discover-top">Bogsey</a>

当我刮的时候我只得到这个

^{pr2}$

我试图找到链接,由于某些原因,href是隐藏的,有没有一种方法可以隐藏链接,以防刮伤或是我没有使用适当的工具。我知道找到href的代码,但现在我只是想用href值返回整个标记

class BandCamp:
    def Search(self):
    page = requests.get("https://bandcamp.com/?g=punk&s=top&p=0&gn=0&f=all&t=folk-punk")
    data = page.content
    soup = BeautifulSoup(data,'lxml')
    for top in soup.find_all('div', {'class':'col col-3-12 discover-item'}):
        link = top.find('a')
        print(top)

bc = BandCamp()
bc.Search()

Tags: httpscomsearchdataartist链接toppage
1条回答
网友
1楼 · 发布于 2024-03-28 23:09:48

您要查找的数据实际上在HTML响应中,但它位于带有id="pagedata"元素的data-blob属性中。此数据由在浏览器中执行的JavaScript处理;requests虽然不是浏览器,它只会下载一个初始的“未呈现”页面。在

下面是如何找到带有“page data”的元素并将其加载到Python字典中:

import json
from pprint import pprint

from bs4 import BeautifulSoup
import requests


page = requests.get("https://bandcamp.com/?g=punk&s=top&p=0&gn=0&f=all&t=folk-punk")
data = page.content
soup = BeautifulSoup(data, 'lxml')

page_data = soup.find(id="pagedata")["data-blob"]
page_data = json.loads(page_data)

pprint(page_data)

相关问题 更多 >