【问题标题】:Why selenium only scrape first page?为什么硒只刮第一页?
【发布时间】:2023-04-09 07:26:01
【问题描述】:

我想爬取这个网站https://hamariweb.com/news/newscategory.aspx?cat=3。代码工作正常,但它只能从第一页连续抓取数据。 这是我的代码

import scrapy
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from scrapy import Spider, Request
from scrapy import signals
from scrapy.http import HtmlResponse
import time
import os

class WebnewsSpider(scrapy.Spider):
   name = 'webnews'
   allowed_domains = ['www.hamariweb.com']
   start_urls = ['https://hamariweb.com/news/newscategory.aspx?cat=3']
 def __init__ (self):
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    self.driver=webdriver.Chrome("C://Users//hammad//Downloads//
    chromedriver",chrome_options=options)

 def parse(self, response):
    self.driver.get(response.url)
    pause_time = 1
    last_height = self.driver.execute_script("return 
                                               document.body.scrollHeight")

    #start = datetime.datetime.now()

    for i in range(10):
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight + 400);")
        time.sleep(pause_time)

        url2=response.xpath('.//*[@class="news_img"]/a/@href').extract()
        print("\n\n\n",url2,"\n\n\n")
        new_height = self.driver.execute_script("return document.body.scrollHeight")

    self.driver.close()
    #print("\n\n",len(l))

【问题讨论】:

标签: python selenium web-scraping scrapy


【解决方案1】:

步骤:

  • 在当前视图中查找最新的帖子/文本。
  • 在最新帖子上执行向下滚动以触发“加载更多数据”

更多信息:

你可以简单地做document.querySelectorAll('#CatNewsList > div').length 结果将是帖子的数量。 遍历每个帖子并提取 URL:

CSS 选择器:

#CatNewsList > div .news_img > a

现在您可以获取标签“href”并提取链接。

当你到达最后一篇文章时,执行滚动到底部并等待 XPATH: //p[text()='loading more news... '] 的元素不可见。

像这样你确定,页面不会加载任何新内容。 保留以前的帖子大小并开始从它解析到下一个帖子长度。

重复。

【讨论】:

  • 我已经编辑了问题,请问您检查问题出在哪里?它向下滚动和下一个元素,但只抓取第一页元素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2019-04-26
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 2017-06-18
相关资源
最近更新 更多