【问题标题】:Trying to access hidden <div> tags when web scraping in python在 python 中进行网络抓取时尝试访问隐藏的 <div> 标签
【发布时间】:2021-06-17 03:28:16
【问题描述】:

所以我试图通过使用 python 进行网页抓取从网站中提取一些数据,但一些 div 标签没有扩展以显示我想要的数据。

这是我的代码。

import requests
from bs4 import BeautifulSoup as soup
uq_url = "https://my.uq.edu.au/programs-courses/requirements/program/2451/2021"                                           
headers = {                                                                                                               
    'User-Agent': "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.27 Safari/537.17"
web_r = requests.get(uq_url, headers=headers)                                                                             
web_soup = soup(web_r.text, 'html.parser')                                                                                
print(web_soup.prettify()) 

                                                                                           

这是代码将抓取的内容,但它不会提取 id="app" 的 div 中的任何数据。它应该有很多数据,如第二张图片。任何帮助将不胜感激。

【问题讨论】:

  • 有时候需要等待网页加载完毕,——这可以通过web驱动来实现——我也经历过对于某些元素比如iframes你需要输入@987654328 @如果您使用的是 web 驱动程序,例如 selenium
  • 谢谢,如果我用的是webdriver,你说的需要进入iframe是什么意思?
  • 所以这对于app 可能不可行,但这里是iframe 的示例
  • 您很可能需要等待页面加载,并使用 webdriver 示例:WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.container-fluid#app"))).get_attribute("outerHTML")

标签: python html web-scraping


【解决方案1】:

所有内容都存在于脚本标签中,如图所示。您可以正则表达式输出适当的 javascript 对象,然后使用 json 处理未引用的键,以便转换为 hjson。然后提取任何你想要的:

import requests, re, hjson
from bs4 import BeautifulSoup as bs #there is some data as embedded html you may wish to parse later from json

r = requests.get('https://my.uq.edu.au/programs-courses/requirements/program/2451/2021', headers = {'User-Agent':'Mozilla/5.0'})
data = hjson.loads(re.search(r'window\.AppData = ([\s\S]+?);\n' , r.text).group(1))
# hjson.dumpsJSON(data['programRequirements'])
core_courses = data['programRequirements']['payload']['components'][1]['payload']['body'][0]['body']

for course in core_courses:
    if 'curriculumReference' in course:
        print(course['curriculumReference'])

【讨论】:

猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多