python - 使用 scrapy 和 selenium 抓取动态内容
问题描述
我的要求 - excel文件中提供了许多url,我必须一个一个地抓取并提取url上的文本部分并加载到数据库中。我已经能够一个一个地读取文件,刮掉excel文件中的所有url(只有文件中给出的url而不是子页面)。我已经使用了flask和scrapy,但问题是有很多web url在其中动态加载数据并且scrapy无法获取文本部分,所以我尝试了splash,它也不适用于我的动态加载文本. 现在,我正在尝试使用 selenium,但它也没有给我输出,我试图在其中截取屏幕截图,然后将读取图像并提取文本部分。任何人都可以展示简单的示例如何使用 selenium 和还有其他方法吗?下面是我正在使用的代码 -
import scrapy
import lxml.html.clean
import re
import w3lib.html
from sqlalchemy import create_engine, Sequence
from sqlalchemy import Table, Column, String, MetaData, Integer, select
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.sql import select
import difflib
from w3lib.html import remove_tags, remove_tags_with_content
from .comparison_data import PageContentComparison
from scrapy_selenium import SeleniumRequest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
class QuotesSpider(scrapy.Spider):
name = "quotes"
def __init__(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
def start_requests(self):
urls = [
'https://www.analog.com/en/products/landing-pages/new-products-listing.html',
# 'http://quotes.toscrape.com/page/2/',
]
for url in urls:
#yield scrapy.Request(url=url, callback=self.parse)
yield SeleniumRequest(url=url, callback=self.parse,screenshot=True,script='window.scrollTo(0, document.body.scrollHeight);')
def parse(self, response):
# self.driver.get(response.url)
# self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# scroll_until_loaded(self)
with open('image.jpeg', 'wb') as image_file:
image_file.write(response.meta['screenshot'])
解决方案
推荐阅读
- html - HTML5 CSS3 在包含图像的单元格上浮动输入文本
- mysql - 创建 Mysql 过程
- node.js - any-db-sqlite3 如何/在哪里将数据库保存到?
- matlab - 未将输出参数分配给子功能程序时如何解决
- android - ObjectAnimator,如何移动对象两次?
- spring - 如何分别为多个控制器在多个文件中编写Spring Boot测试用例
- caching - 创建/更新/删除后如何清除 .Net Core 上的响应缓存?
- angular - Angular 6将行转换为多列
- magento - 导入产品未显示在前端页面上
- angular - 未在 POST 响应中设置标头