2017-01-23 1 views
4

У меня есть веб-страница, открытая и зарегистрированная с использованием кода webdriver. Использование webdriver для этого, потому что на странице требуется логин и различные другие действия, прежде чем я настроюсь на очистку.Использовать уже открытую веб-страницу (с селеном) для beautifulsoup?

Целью является очистка данных с этой открытой страницы. Нужно найти ссылки и открыть их, поэтому будет много сочетаний между selenium webdriver и BeautifulSoup.

Я посмотрел на документацию для BS4 и BeautifulSoup(open("ccc.html")) выдает ошибку

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

OSError: [Errno 22] Invalid argument: ' https://m/search.mp?ss=Pr+Dn+Ts '

Я полагаю, это потому, что его не .html?

+0

см [как получить innerHTML из целой страницы в драйвере селеном] (https://stackoverflow.com/questions/35905517/how-to-get-innerhtml-of-whole-page-in-selenium-driver) – robyschek

ответ

6

Вы пытаетесь открыть страницу по веб-адресу. 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 в этом В случае наличия других парсеров.


I want to use the exact same page(same instance)

Обычный способ сделать это, чтобы получить 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") 
+2

Я думаю, что я не объяснил правильно, страница уже открыта. :(Я хочу использовать ту же страницу (тот же самый экземпляр), открытый selenium. В обоих примерах я предполагаю, что новый запрос на основе url делается для открытия/получения данных. – Sid

+1

@ Сильно, я обновил ответ - пожалуйста, посмотрите, это то, что вы имели в виду. Спасибо. – alecxe

+0

Третий был именно тем, что я искал. :) Спасибо – Sid

Смежные вопросы