【问题标题】:Use an already open webpage(with selenium) to beautifulsoup?使用已经打开的网页(带有硒)来美化汤?
【发布时间】:2017-06-08 06:58:38
【问题描述】:

我打开了一个网页并使用 webdriver 代码登录。为此使用 webdriver,因为在我设置为抓取之前,该页面需要登录和各种其他操作。

目的是从这个打开的页面中抓取数据。需要找到链接并打开,所以selenium webdriver和BeautifulSoup会有很多组合。

我查看了 bs4 的文档,BeautifulSoup(open("ccc.html")) 抛出错误

soup = bs4.BeautifulSoup(open("https://m/search.mp?ss=Pr+Dn+Ts"))

OSError:[Errno 22] 无效参数:'https://m/search.mp?ss=Pr+Dn+Ts'

我认为这是因为它不是.html

【问题讨论】:

标签: python selenium beautifulsoup


【解决方案1】:

您正试图通过网址打开页面。 open() 不会那样做,使用urlopen()

from urllib.request import urlopen  # Python 3
# from urllib2 import urlopen  # Python 2

url = "your target url here"
soup = bs4.BeautifulSoup(urlopen(url), "html.parser")

或者,为人类使用 HTTP - requests library

import requests

response = requests.get(url)
soup = bs4.BeautifulSoup(response.content, "html.parser")

另请注意,强烈建议使用specify a parser explicitly - 在这种情况下我使用了html.parser,还有其他可用的解析器。


我想使用完全相同的页面(相同的实例)

一种常见的方法是获取driver.page_source 并将其传递给BeautifulSoup 以进行进一步解析:

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Firefox()
driver.get(url)

# wait for page to load..

source = driver.page_source
driver.quit()  # remove this line to leave the browser open

soup = BeautifulSoup(source, "html.parser")

【讨论】:

  • 我想我没有解释清楚,页面已经打开了。 :( 我想使用由 selenium 打开的完全相同的页面(相同的实例)。在这两个示例中,我假设正在对打开/获取数据发出一个新的基于 url 的请求。
  • @Sid 好吧,我已经更新了答案 - 请看看这是否是你的意思。谢谢。
  • 第三个正是我想要的。 :) 谢谢
猜你喜欢
  • 2021-03-30
  • 2020-12-13
  • 1970-01-01
  • 2012-12-18
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2019-07-29
相关资源
最近更新 更多