使用scrapy和selenium抓取动态内容

时间:2020-12-19 12:48:57

标签: python selenium selenium-webdriver scrapy

我的要求 - excel文件中提供了许多网址,我必须一一抓取并提取网址上的文本部分并加载到数据库中。我已经能够一一读取文件,抓取excel文件中的所有网址(只有文件中给出的网址,而不是子页面)。我已经使用了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']) 

0 个答案:

没有答案