Web抓取返回空列表

时间:2020-04-16 06:25:09

标签: web-scraping

我正在尝试从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)

2 个答案:

答案 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。