为什么硒只刮第一页?

时间:2019-10-11 11:29:40

标签: python selenium web-scraping scrapy

我要抓取该网站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))

1 个答案:

答案 0 :(得分:0)

步骤:

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

更多信息:

您只需执行document.querySelectorAll('#CatNewsList > div').length 结果将是帖子数。 遍历每个帖子并提取URL:

CSS选择器:

  

#CatNewsList> div .news_img> a

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

到达最后一个帖子时,执行滚动到底部,然后等待XPATH://p[text()='loading more news... ']的元素不可见。

像这样,您可以确定页面未加载任何新内容。 保持以前的帖子大小,然后从该大小开始解析到下一个帖子长度。

重复。