接上一篇,解决完动态渲染的问题,发现还有坑,iframe内部的内容还是定位不到,网上冲浪半小时,就发现2篇比较片面的文章,通过这些碎片信息,我们最后还是成功提取到了,感谢搜索引擎。
- 安装selenium
pip install selenium
- 在scrapy项目中引入
from selenium import webdriver
- 在项目中使用
def parseKCNR(self,url,folderName,id):
browser = webdriver.Chrome()//创建浏览器对象
browser.get(url)//传入目标url
driver.implicitly_wait(1)//设置等待,根据实际情况配置
browser.switch_to.frame('xreader')//转到ifram内容里面
imgList=browser.find_elements(By.XPATH,"//div[@class='reader-container-inner']/div")//通过xpath定位,这里需要在头部引入By,from selenium.webdriver.common.by import By
for item in imgList:
imgurl =item.find_element(By.XPATH,"//div[@class='reader-pic-item']").get_attribute('style')
print(imgurl)
4.好了到这里差不多就网上的教程内容了,运行一下发现提示创建浏览器对象失败
好了接下里开始解决问题
- 安装chromedriver,因为我这里用的是
browser = webdriver.Chrome()
安装路径:(建议用淘宝的源):
这里还要注意的就是先查看你的chrome版本,找对应版本的(实在有小版本差异,找最近的我发现好像也可以)
- 将下载下来的压缩包接下有一个
chromedriver.exe
文件,将他复制到你的chrome根目录下 - 再把这个
chromedriver.exe
文件复制到python根路径下
有可能你跟我一样也用了Anaconda来配置python环境,没关系,打开cmd 输入```where python````就能找到当前python环境的根路径
- 最后还要把chrome根路径添加到系统环境变量path中去 ,这个就不多说了,大家应该都会
OK,现在就可以愉快的抓取iframe里的内容了,溜了。