Ary*_*att 5 facebook web-crawler scrapy web
Facebook上的新图搜索允许您使用查询令牌搜索公司的当前员工 - 例如当前的Google员工(例如).
我想通过scrapy刮取结果页面(http://www.facebook.com/search/104958162837/employees/present).
最初的问题是facebook只允许facebook用户访问该信息,因此将我引导至login.php.所以,在抓取这个网址之前,我通过scrapy登录,然后是结果页面.但即使此页面的http响应为200,它也不会丢弃任何数据.代码如下:
import sys
from scrapy.spider import BaseSpider
from scrapy.http import FormRequest
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.http import Request
class DmozSpider(BaseSpider):
name = "test"
start_urls = ['https://www.facebook.com/login.php'];
task_urls = [query]
def parse(self, response):
return [FormRequest.from_response(response, formname='login_form',formdata={'email':'myemailid','pass':'myfbpassword'}, callback=self.after_login)]
def after_login(self,response):
if "authentication failed" in response.body:
self.log("Login failed",level=log.ERROR)
return
return Request(query, callback=self.page_parse)
def page_parse(self,response):
hxs = HtmlXPathSelector(response)
print hxs
items = hxs.select('//div[@class="_4_yl"]')
count = 0
print items
Run Code Online (Sandbox Code Playgroud)
我错过了什么或做错了什么?
问题是搜索结果(特别是div initial_browse_result)是通过javascript动态加载的.Scrapy在这些操作之前收到页面,因此还没有结果.
基本上,这里有两个选项:
尝试在scrapy中模拟这些js(XHR)请求,请参阅:
如果你选择第一个选项,你应该分析页面加载过程中发出的所有请求,并确定哪个请求负责获取你想要搜索的数据.
第二个是非常简单的,但肯定会工作 - 你只需使用其他工具来获取通过js数据加载的页面,然后将其解析为scrapy项目.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
13090 次 |
| 最近记录: |