#爬取豆瓣电影,使用selenium爬取,正则解析错误
#报错:TypeError: expected string or bytes-like object, got 'NoneType'
代码:
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
import re
#options=webdriver.ChromeOptions()
#options.add_argument('--headless')
driver= webdriver.Chrome()
driver.get(url='https://www.douban.com/')
#切换到iframe子页面,切换句柄:
iframe_node=driver.find_element(By.XPATH,'//*[@id="anony-reg-new"]/div/div[1]/iframe')
driver.switch_to.frame(iframe_node)
driver.maximize_window()
driver.find_element(By.XPATH,"/html/body/div[1]/div[1]/ul[1]/li[2]").click()
driver.find_element(By.XPATH,'//*[@id="username"]').send_keys('18885410657')
driver.find_element(By.XPATH,'//*[@id="password"]').send_keys('708090.')
driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
time.sleep(5)
html=driver.get(url='https://accounts.douban.com/passport/login_popup?login_source=anony')
regex='<div class="tc-bg-img unselectable" .*? background-image: url("(.*?)).*?</div>'
pattern=re.compile(regex,re.S)
r_list=pattern.findall(html)
print(r_list)
#怎么解决,是正则表达式错误了么,我是新学者,请求帮忙!
html = driver.get(url='https://accounts.douban.com/passport/login_popup?login_source=anony%27)
这个不对,这个是打开webdriver页面
如果你要获取html的内容,你应该用driver.page_source
比如
driver.get(url='https://accounts.douban.com/passport/login_popup?login_source=anony%27)
time.sleep(5) # 延迟一段时间等待页面加载完成,也可以使用其他等待方式
html = driver.page_source
这个错误的原因是在使用driver.get()
方法时,返回的值是None,并且你将其赋给了变量html。因此,在接下来的代码中,当你尝试对None进行正则表达式解析时,就会抛出"TypeError: expected string or bytes-like object, got 'NoneType'"的错误。
要解决这个问题,可以采用以下步骤:
print(webdriver.ChromeOptions().version)
driver.get()
方法改为driver.page_source
。这样就可以获取当前页面的源代码,将其作为字符串继续操作。具体更改如下:html = driver.page_source
time.sleep(5)
之后,以确保页面加载完全。具体更改如下:time.sleep(5)
html = driver.page_source
regex = r'<div class="tc-bg-img unselectable" .*? background-image: url("(.*?).*?)</div>'
pattern = re.compile(regex, re.S)
r_list = pattern.findall(html)
print(r_list)
希望以上步骤能够解决你的问题。如果还有其他疑问,请随时追问。