首页 > 解决方案 > 使用 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']) 

标签: pythonseleniumselenium-webdriverscrapy

解决方案


推荐阅读