我正在尝试从https://www.dsmart.com.tr/yayin-akisi抓取以下信息。但是下面的代码返回空列表。有想法吗?
<div class="col"><div class="title fS24 paBo30">NELER OLUYOR HAYATTA</div><div class="channel orangeText paBo30 fS14"><b>24 | 34. KANAL | 16 Nisan Perşembe | 6:0 - 7:0</b></div><div class="content paBo30 fS14">Billur Aktürk’ün sunduğu, yaşam değerlerini sorgulayan program Neler Oluyor Hayatta, toplumsal gerçekliğin bilgisine ulaşma noktasında sınırları zorluyor. </div><div class="subTitle paBo30 fS12">Billur Aktürk’ün sunduğu, yaşam değerlerini sorgulayan program Neler Oluyor Hayatta, toplumsal gerçekliğin bilgisine ulaşma noktasında sınırları zorluyor. </div></div>
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url="https://www.dsmart.com.tr/yayin-akisi"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "lxml")
for link in page_soup.find_all("div", {"class":"col"}):
print(link)
答案 0 :(得分:2)
此页面在浏览器中呈现。您正在下载的HTML仅包含js文件的链接,这些文件随后会呈现页面内容。
您可以使用真实的浏览器来呈现页面(硒,飞溅或类似技术)或了解该页面如何接收所需的数据。
长话短说,此链接https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=1&limit=10&day=2020-04-16要求在此页面上呈现的数据
它是格式良好的JSON,因此解析起来非常容易。我建议下载带有请求模块的页面-它可以将json响应作为dict返回。
答案 1 :(得分:1)
此网站通过获取其API的调用进行填充。您可以在浏览器(Chrome / Firefox)devtools网络上看到get调用。如果进行检查,您将看到他们正在调用API。
import requests
URL = 'https://www.dsmart.com.tr/api/v1/public/epg/schedules'
# parameters that you can tweak or add in a loop
# e.g for page in range(1,10): to get multiple pages
params = dict(page=1, limit=10, day='2020-04-16')
r = requests.get(URL,params=params)
assert r.ok, 'issues getting data'
data = r.json()
# data is dictonary that you can grab data out using keys
print(data)
在这种情况下,不建议使用BeautifulSoup。