相关疑难解决方法(0)

硒与scrapy动态页面

我正在尝试使用scrapy从网页上抓取产品信息.我的待删节网页如下所示:

  • 从包含10个产品的product_list页面开始
  • 点击"下一步"按钮加载下10个产品(两个页面之间的网址不变)
  • 我使用LinkExtractor跟踪每个产品链接到产品页面,并获得我需要的所有信息

我试图复制next-button-ajax-call但是无法正常工作,所以我试试了selenium.我可以在一个单独的脚本中运行selenium的webdriver,但我不知道如何与scrapy集成.我应该把硒部分放在我的scrapy蜘蛛里?

我的蜘蛛非常标准,如下所示:

class ProductSpider(CrawlSpider):
    name = "product_spider"
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/shanghai']
    rules = [
        Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
        ]

    def parse_product(self, response):
        self.log("parsing product %s" %response.url, level=INFO)
        hxs = HtmlXPathSelector(response)
        # actual data follows
Run Code Online (Sandbox Code Playgroud)

任何想法都表示赞赏.谢谢!

python selenium scrapy web-scraping selenium-webdriver

74
推荐指数
1
解决办法
7万
查看次数

使用python-Scrapy刮擦动态内容

免责声明:我在StackOverflow上看过很多其他类似的帖子,并尝试以同样的方式做到这一点,但他们似乎没有在这个网站上工作.

我正在使用Python-Scrapy从koovs.com获取数据.

但是,我无法获得动态生成的产品大小.具体来说,如果有人可以通过链接的下拉菜单指导我获取"不可用"尺寸标签,我将不胜感激.

我能够静态获取大小列表,但这样做我只获得大小列表,但不能获得哪些大小.

python scrapy web-scraping

36
推荐指数
2
解决办法
4万
查看次数

如何为不同的蜘蛛设置不同的scrapy设置?

我想为一些蜘蛛启用一些http代理,并为其他蜘蛛禁用它们.

我可以这样做吗?

# settings.py
proxy_spiders = ['a1' , b2']

if spider in proxy_spider: #how to get spider name ???
    HTTP_PROXY = 'http://127.0.0.1:8123'
    DOWNLOADER_MIDDLEWARES = {
         'myproject.middlewares.RandomUserAgentMiddleware': 400,
         'myproject.middlewares.ProxyMiddleware': 410,
         'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
    }
else:
    DOWNLOADER_MIDDLEWARES = {
         'myproject.middlewares.RandomUserAgentMiddleware': 400,
         'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None
    }
Run Code Online (Sandbox Code Playgroud)

如果上面的代码不起作用,还有其他建议吗?

scrapy

17
推荐指数
4
解决办法
1万
查看次数

如何使用selenium浏览器生成的html内容将动态网站内容发送到scrapy?

我正在从事某些与股票相关的项目,我的任务是在过去 5 年里每天抓取所有数据。即从 2016 年至今。我特别想到使用selenium,因为我可以使用爬虫和机器人根据日期抓取数据。因此,我将按钮单击与 selenium 结合使用,现在我希望 scrappy 提供与 selenium 浏览器显示的相同数据。这是我现在正在开发的网站。我在 scrappy Spider 中编写了以下代码。

class FloorSheetSpider(scrapy.Spider):
    name = "nepse"

    def start_requests(self):

        driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
        
     
        floorsheet_dates = ['01/03/2016','01/04/2016', up to till date '01/10/2022']

        for date in floorsheet_dates:
            driver.get(
                "https://merolagani.com/Floorsheet.aspx")

            driver.find_element(By.XPATH, "//input[@name='ctl00$ContentPlaceHolder1$txtFloorsheetDateFilter']"
                                ).send_keys(date)
            driver.find_element(By.XPATH, "(//a[@title='Search'])[3]").click()
            total_length = driver.find_element(By.XPATH,
                                               "//span[@id='ctl00_ContentPlaceHolder1_PagerControl2_litRecords']").text
            z = int((total_length.split()[-1]).replace(']', ''))    
            for data in range(z, z + 1):
                driver.find_element(By.XPATH, "(//a[@title='Page {}'])[2]".format(data)).click()
                self.url = driver.page_source
                yield Request(url=self.url, callback=self.parse)

               
    def parse(self, response, **kwargs):
        for value in response.xpath('//tbody/tr'):
            print(value.css('td::text').extract()[1])
            print("ok"*200)
Run Code Online (Sandbox Code Playgroud)

更新:回答后错误是 …

python selenium scrapy selenium-webdriver

7
推荐指数
1
解决办法
1280
查看次数

将Selenium与Scrapy整合

有没有办法有效地将Selenium集成到Scrapy中,以获得页面渲染功能(为了生成屏幕截图)?

我看到的很多解决方案只是 Scrapy已经处理完请求在WebDriver上抛出一个Scrapy请求/响应URL ,然后就这样做了.这会产生两倍的请求,在许多方面失败(需要登录的站点,具有动态或伪随机内容的站点等),并使许多扩展/中间件无效.

是否有任何"好"的方式让两个人一起工作?有没有更好的方法来生成我正在抓取的内容的屏幕截图?

python selenium scrapy web-scraping selenium-webdriver

5
推荐指数
1
解决办法
4744
查看次数