python - 将渲染页面从 Selenium 传递给 Scrapy
问题描述
我想抓取需要登录的 Javascript 页面。我想知道是否可以使用 Selenium 加载并登录页面,然后将渲染的代码传递给 Scrapy 以进行数据提取。
import scrapy
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from seleniumrequests import Firefox,Chrome
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class ContractSpider(scrapy.Spider):
name = "contracts"
def start_requests(self):
url = 'https://adactmedical.com/tpd'
yield scrapy.Request(url=url, callback=self.parse)
def __init__(self):
driver = Firefox(executable_path='C:/Users/Matija/Dropbox/Programing/Scraping/geckodriver.exe')
driver.implicitly_wait(5)
@staticmethod
def get__response(url):
self.driver.get(url)
return self.driver.page_source.encode('utf-8')
def parse(self, response):
selenium_response = Selector(text=self.get_selenium_response(response.url))
print(selenium_response)
解决方案
您需要使用 JavaScript 来执行此操作,但可以轻松完成。
import time
time.sleep(5)
html = driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
print html
推荐阅读
- laravel - Laravel 任务调度程序没有自动运行命令
- django - 如何修复“无法重新启动 gunicorn.service:未找到单元 gunicorn.socket。” 错误?
- java - 无法解析类 android.support.v7.widget.Toolbar
- camera-calibration - 将任意 3D 点投影到图像平面中的一个点给出任意结果
- woocommerce - 基于邮政编码的 Woocommerce 结帐字段
- php - 如何解决 Laravel 函数中的全局变量声明而不是普通的 PHP?
- java - 重定向到正确的静态页面页面
- opencv - 如何改进 mp4 视频片段上的 ArUco 标记跟踪
- javascript - 使用 Context API 响应输入 onChange 问题
- rust - 为什么在 `while let Some() = xxx` 循环之后仍然借用 `tail`?