我打开了一个网页,并使用webdriver代码登录.使用webdriver是因为在我设置为scrape之前页面需要登录和各种其他操作.
目的是从这个打开的页面中抓取数据.需要找到链接并打开它们,因此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
?
您正在尝试通过网址打开页面.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
库:
import requests response = requests.get(url) soup = bs4.BeautifulSoup(response.content, "html.parser")
另请注意,强烈建议明确指定解析器 - 我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")