【问题标题】:Wrong parsing with BeautifulSoupBeautifulSoup 解析错误
【发布时间】:2018-03-04 13:36:21
【问题描述】:

我想访问这个网站的标题: https://zenodo.org/search?page=1&size=20&q=broma 实际上,我使用 BeautifulSoup,但是当我使用此代码访问时,结果为空([]):

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

def generateSoup(my_url):
    uClient = uReq(my_url)
    page_html = uClient.read()   
    uClient.close()
    return soup(page_html,"lxml")

page_soup = generateSoup('https://zenodo.org/search?page=1&size=20&q=broma')
containers = page_soup.findAll('a',{'class':'ng-binding'})
print(containers)

如果您能更正我的代码或给我另一个我可以使用的库,我将非常感谢您的帮助。

谢谢大家。

编辑:问题是 HTML 网站没有这个元素: Element

【问题讨论】:

  • 对不起。我忘了说清楚,我需要的是标题“教育、健康和体育年度报告 9781329899971”(确实是链接,但目前标题对我有用)。

标签: python beautifulsoup urllib


【解决方案1】:

本网站使用AJAX显示结果,你可以找到AJAX请求获取JSON结果。

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import json

def generateJson(my_url):
    uClient = uReq(my_url)
    page_html = uClient.read()
    uClient.close()
    return json.loads(page_html.decode("utf-8"))

page_json = generateJson('https://zenodo.org/api/records/?page=1&size=20&q=broma')
print(page_json["hits"]["hits"][0]["metadata"]["title"])

【讨论】:

  • 感谢您的回复。问题是当我想要标题“教育、健康和体育 9781329899971 年度报告”时,我无法通过 container = page_soup.findAll('div',{'class':'ng-binding'})
  • 将page_soup对象打印到console,可以发现没有div哪个class是ng-binding。因为网站使用AJAX生成结果。
  • 太棒了。太感谢了。我会尝试获取标题的链接。
猜你喜欢
  • 2016-09-02
  • 2015-07-09
  • 1970-01-01
  • 2023-03-16
  • 2015-09-08
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
相关资源
最近更新 更多