Selenium with Scrapy刮掉FB页面

时间:2015-02-03 11:54:18

标签: python selenium selenium-webdriver scrapy

这是我的蜘蛛我只能得到第一个元素结果(Praxy Paris)。我需要在最多评论页面中获取所有数据。怎么做到的?

from scrapy.spider import BaseSpider
from selenium import webdriver

class SeleSpider(BaseSpider):
    name = "see"
        start_urls = ['https://www.facebook.com/HRCMallOfAmerica/reviews']
        def __init__(self):
                self.driver = webdriver.Firefox()
        def parse(self, response):
                self.driver.get(response.url)
                self.driver.find_element_by_link_text("MOST RECENT").click()
                self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
                time.sleep(2)
                elem = self.driver.find_elements_by_id("most_recent_reviews_list")

                for i in elem:
                    x = i.find_element_by_tag_name("strong").text
                    print x

下一段代码尝试获取最新页面的页面源,但它只显示请求的页面。

通过selenium点击功能处理链接后,我需要使用python的html代码。我尝试了但是它会将html代码抛出driver.get(url)的网址。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib,urllib2

f = open('x.html','w')
driver = webdriver.Firefox()
url = "https://www.facebook.com/HRCMallOfAmerica/reviews"
driver.get(url)
driver.find_element_by_link_text("MOST RECENT").click()
r=urllib.urlopen(url) // For URL what I have to insert
x=r.read()
print x

1 个答案:

答案 0 :(得分:1)

<强>问题

代码中的问题是,单击下一页的按钮时,网址不会更改。您的代码采用相同的网址并返回相同的第一页。

<强>解决方案

将按钮单击方法保持在循环内(在覆盖所有页面之前应该为true)。

而不是

r = urllib2.urlopen(url)

r = urllib2.urlopen(driver.page_source)

那应该做的工作。