【问题标题】:python requests only returning empty sets when scrapingpython请求在抓取时只返回空集
【发布时间】:2020-06-01 23:24:48
【问题描述】:

这是我第一次尝试编程。我正在尝试通过 scraping 使用 bs4、selenium 等 scrape 一些单词... 我使用的网站是'http://oulim.kr'

我如何抓取框架集中的东西?

这是我尝试过的

import urllib
from bs4 import BeautifulSoup
from selenium import webdriver

url = 'http://oulim.kr/'

driver = webdriver.Chrome('./driver/chromedriver')
driver.get(url)

html = driver.page_source
soup = BeautifulSoup(html)

a = soup.select("#divAlba > table:nth-child(3) > tbody > tr:nth-child(2) > td:nth-child(5) > a > font > b")
print(a)

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('http://oulim.kr')
r.html.find('.tbody')

【问题讨论】:

  • 你为什么不使用 BS 从帧中抓取 - 你有 url "main.asp" 和 'oulim.kr' 所以它应该使用 'http://oulim.kr/main.asp'BeautifulSoup
  • Selenium 拥有driver.switch_to.frame(...)
  • 仅供参考,它是 scrapescrape 不是报废或报废

标签: python html web-scraping frame


【解决方案1】:

Selenium 将框架视为单独的页面(因为它必须单独加载它)并且它不在框架中搜索。并且page_source 不会从框架返回HTML

您必须找到<frame> 并切换到正确的框架switch_to.frame(..) 才能使用它。

frames = driver.find_elements_by_tag_name('frame')
driver.switch_to.frame(frames[0])

import urllib
from bs4 import BeautifulSoup
from selenium import webdriver

url = 'http://oulim.kr/'

driver = webdriver.Chrome('./driver/chromedriver')
driver.get(url)

# --- switch frame ---

frames = driver.find_elements_by_tag_name('frame')
driver.switch_to.frame(frames[0])

# --- CSS without BeautifulSoup ---

a = driver.find_element_by_css_selector("#divAlba > table:nth-child(3) > tbody > tr:nth-child(2) > td:nth-child(5) > a > font > b")
print(a.text)

# --- CSS with BeautifulSoup ---

html = driver.page_source
soup = BeautifulSoup(html)

a = soup.select("#divAlba > table:nth-child(3) > tbody > tr:nth-child(2) > td:nth-child(5) > a > font > b")
print(a[0].text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多