【问题标题】:Selenium with Scrapy to Scrape the FB pagesSelenium 用 Scrapy 刮掉 FB 页面
【发布时间】:2015-04-02 14:40:05
【问题描述】:

这是我的蜘蛛,我只能得到第一个元素结果(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 click 函数处理链接,我需要使用 python 的 html 代码。我试过了,但它在driver.get(url)的url中抛出了html代码。

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

【问题讨论】:

  • 抓取 facebook 是否违反其服务条款?
  • 然后使用Facebook API如何获取评论,它可能会询问页面访问令牌。如何得到它

标签: python selenium selenium-webdriver scrapy


【解决方案1】:

问题

您的代码中的问题是,在单击下一页的按钮时 url 没有改变。您的代码采用相同的 url 并返回相同的第一页。

解决方案

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

代替

r = urllib2.urlopen(url)

写

r = urllib2.urlopen(driver.page_source)

这应该做的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2021-02-05
    • 2020-04-14
    相关资源
    最近更新 更多