使用Scrapy模拟登陆人人网
一. 新建项目(scrapy startproject)
打开命令行,按以下步骤操作
C:\Users\JunSIr>d:
D:\mkdir scrapyProject
D:\>cd scrapyProject
D:\scrapyProject>scrapy startproject renrenSpider
------------------------------------------------------------
New Scrapy project 'renrenSpider', using template directory 'D:\anaconda\lib\site-packages\scrapy\templates\project', created in:
D:\scrapyProject\renrenSpider
You can start your first spider with:
cd renrenSpider
scrapy genspider example example.com
------------------------------------------------------------
D:\scrapyProject>cd renrenSpider
D:\scrapyProject\renrenSpider>
- 打开pycharm --> 文件—>打开—>找到我们之前用命令行创建的爬虫文件夹,看到如下
- scrapy.cfg: 项目的配置文件。
- items.py: 项目的目标文件。
- pipelines.py: 项目的管道文件。
- settings.py: 项目的设置文件。
- /spiders/: 存储爬虫代码目录。
二.修改settings.py
- 取消管道注释
- 取消请求头注释并添加请求头
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
三.爬虫制作
命令行输入`scrapy genspider renren “renren.com”``
在pycharm—>/spiders/renren.py下编写
# -*- coding: utf-8 -*-
import scrapy
class RenrenSpider(scrapy.Spider):
name = 'renren'
allowed_domains = ['renren.com']
start_urls = ['http://renren.com/']
#爬虫一开始就POST请求必重写start_request方法
def start_requests(self):
url = "http://www.renren.com/PLogin.do"
data = {"email":"xxxx","password":"pythonspider"}
request =scrapy.FormRequest(url,formdata=data,callback=self.parse)
yield request
#理解,yield给调度器-->得到response--->带着response,callback给parse
def parse(self, response):
request = scrapy.Request(url = 'http://www.renren.com/880151247/profile',
callback=self.parse_profile
)
yield request
# 理解,yield给调度器-->得到response--->带着response,callback给parse_profile
#访问只有登陆状态才能访问的大鹏个人主页
def parse_profile(self,response):
with open('dp.html','w',encoding='utf8') as fp:
fp.write(response.text)
#代码讲解:
# 一、不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成
# 二、带括号(参数或者无参),调用的是函数的执行结果,须等该函数执行完成的结果
#三、scrapy.FormRequest使用于scrapy的Post请求,否则可以直接使用scrapy.Request