【问题标题】:Web scraping returns empty list网页抓取返回空列表
【发布时间】:2020-04-16 06:25:09
【问题描述】:

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

【问题讨论】:

  • 一个更好的问题还包括预期的输出:)

标签: web-scraping


【解决方案1】:

此页面在浏览器中呈现。您正在下载的 HTML 仅包含指向 js 文件的链接,这些文件稍后会呈现页面内容。

您可以使用真实浏览器来呈现页面(selenium、splash 或类似技术)或了解此页面如何接收您需要的数据。

长话短说,此页面上呈现的数据来自此链接https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=1&limit=10&day=2020-04-16

它是格式良好的 JSON,因此很容易解析。我建议下载带有请求模块的页面 - 它可以将 json 响应作为 dict 返回。

【讨论】:

  • 我们有类似的方法。唯一的区别是有关如何查找接听电话的详细信息。竖起大拇指:)
【解决方案2】:

该网站由对其 API 的 get 调用填充。您可以在浏览器 (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 是没有根据的。

【讨论】:

  • 谢谢大家 :) 正如你所说,解析 json 很容易 :) 你能解释一下你是如何找到那个 url 的吗?
  • 浏览器的开发者工具(F12 按钮)是查找它们的好工具。我们需要带有过滤器“XHR”的“网络”选项卡。然后只需重新加载页面,我们将在重新加载页面上看到脚本发出的所有请求
  • 你好@MadRay。您还可以帮我找到我要解析的以下网站的方法吗?您将看到显示为 BUGUN(今天)和 YARIN(明天)的选项卡。我可以解析今天的 html,但我找不到解析明天的方法(YARIN),因为它不是单独的链接。 aksiyon.sinematv.com.tr/Yayin-Akisi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2021-11-15
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多