【问题标题】:Problem in web scraping with Beautiful Soup and urllib使用 Beautiful Soup 和 urllib 进行网页抓取的问题
【发布时间】:2020-07-27 21:56:39
【问题描述】:

你好!

我正在英超联赛网站上进行一些抓取,但遇到了以下问题。当我运行这个时:

my_url = 'https://www.premierleague.com/match/{}'.format(i)
client = urlopen(my_url)
page_html = client.read()

page_html 的这个特定部分是这样返回的:

<div class="matchDate renderMatchDateContainer" data-kickoff="1583784000000"></div>

当它应该是这样的时候,正如我在浏览器上看到的那样:

<div class="matchDate renderMatchDateContainer" data-kickoff="1583784000000">Mon 9 Mar 2020</div>

因此,我无法抓取日期“2020 年 3 月 9 日星期一”。

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 你在格式化什么? .format(i)?你能发布更多代码吗
  • 如果页面使用 JavaScript 添加数据,那么您需要 Selenium 而不是 BS 和 urllib,因为 BS 和 urllib 无法运行 JavaScript。
  • 嗨@0m3r。 .format(i) 只是为了让我可以使用 for 循环访问多个页面。每个网址都是这样的:premierleague.com/match/46605
  • 嗨@furas。我真的不知道该页面是否使用 JavaScript,但我能够使用 BS 抓取大量数据。我只是在纠结日期和时间。

标签: python html web-scraping beautifulsoup urllib


【解决方案1】:

data-kickoff=15836850000001583685000 代表 2020/03/09,你是在用 JavaScript 做数学吗? 为什么不尝试转换这些数据?

num = 1583685000000
s = str(num)
date = int(s[0:-3])
d = datetime.date.fromtimestamp(date)
d.strftime('%d/%m/%y')

'09/03/20'

【讨论】:

  • 你好。这实际上很有帮助,我没有看到这样的东西,所以谢谢!但是我不知道如何从标签中提取这个数字,因为它不是标签的文本,你能帮我吗?
  • ``` dates = soup.find_all('div', class_='matchDate renderMatchDateContainer') for d in dates: dd = d['data-kickoff'] print(dd) ```
  • 它的工作原理是这样的:'date = page_soup.find('div', class_='matchDate renderMatchDateContainer')['data-kickoff']',非常感谢!但是,您知道为什么 page_html 没有像我在问题中显示的那样附带文本吗?当我在浏览器中检查页面时,我可以看到文本(如图所示),并且 html 的所有其他部分都带有文本。我不明白。不过非常感谢!
  • 我也不确定为什么它没有价值。我很乐意尽我所能提供帮助。
  • @OtávioSimõesSilveira 在浏览器中,您会看到带有 JavaScript 更改的 HTML。但是 BS 不能运行 JavaScript,它给你的 HTML 没有改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
相关资源
最近更新 更多