【发布时间】:2016-08-21 09:26:19
【问题描述】:
我刚开始使用 scrapy 和 Selenium,在抓取无限滚动的网页时遇到了一些问题:
http://observador.pt/opiniao/autor/ahcristo
所以,我想提取每个条目(政治文本)的链接。单独使用scrapy是不可能的,因为需要向下滚动才能显示所有条目。我正在使用 selenium 来模拟 chrome 浏览器和向下滚动。我的问题是滚动不起作用。我根据this 或this 等其他类似示例编写代码。代码在每次滚动后计算入口链接的总数,如果它工作正常,它应该在每一步后增加。它给了我恒定数量的 24 个链接。
## -*- coding: utf-8 -*-
import scrapy
from selenium import webdriver
import time
from observador.items import ObservadorItem
class OpinionSpider(scrapy.Spider):
name = "opinionspider"
start_urls = ["http://observador.pt/opiniao/"]
def __init__(self):
self.driver = webdriver.Chrome()
def parse(self, response):
# Colunistas
for url in response.xpath('//*[@id="main"]/div/div[1]/ul/li[1]/div/ul/li[*]/a/@href').extract():
# test for a single author
if url == 'http://observador.pt/opiniao/autor/ahcristo':
yield scrapy.Request(url,callback=self.parse_author_main_page)
else:
continue
def parse_author_main_page(self,response):
self.driver.get(response.url)
count = 0
for url in response.xpath('//*[@id="main"]/div/div[3]/div[1]/article[*]/h1/a/@href').extract():
count += 1
print "Number of links: ",count
for i in range(1,100):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
count = 0
for url in response.xpath('//*[@id="main"]/div/div[3]/div[1]/article[*]/h1/a/@href').extract():
count += 1
print "Number of links: ",count
self.driver.close()
【问题讨论】:
标签: python selenium web-scraping scrapy infinite-scroll