scrapy实战--登陆人人网爬取个人信息

今天把scrapy的文档研究了一下,感觉有点手痒,就写点东西留点念想吧,也做为备忘录。随意写写,看到的朋友觉得不好,不要喷我哈。

创建scrapy工程

cd C:Spider_devappscrapyprojects
scrapy startproject renren

创建定向爬虫

cd renren
scrapy genspider Person renren.com

查看目录结构

定义items

class RenrenItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    sex = scrapy.Field()  # 性别
    birthday = scrapy.Field()  # 生日
    addr = scrapy.Field()  # 家乡

 编写爬虫

# -*- coding: gbk -*-
import scrapy

# 导入items中的数据项定义模块
from renren.items import RenrenItem

class PersonSpider(scrapy.Spider):
    name = "Person"
    allowed_domains = ['renren.com']
    start_urls = ['http://www.renren.com/913043576/profile?v=info_timeline']

    def start_requests(self):
        return [scrapy.FormRequest('http://www.renren.com/PLogin.do',
                                   formdata={'email':'15201417639','password':'kongzhagen.com'},
                                   callback=self.login)]

    def login(self,response):
        for url in self.start_urls:
            yield self.make_requests_from_url(url)

    def parse(self, response):
        item = RenrenItem()
        basicInfo = response.xpath('//div[@id="basicInfo"]')
        sex = basicInfo.xpath('div[2]/dl[1]/dd/text()').extract()[0]
        birthday = basicInfo.xpath('div[2]/dl[2]/dd/a/text()').extract()
        birthday = ''.join(birthday)
        addr = basicInfo.xpath('div[2]/dl[3]/dd/text()').extract()[0]
        item['sex'] = sex
        item['addr'] = addr
        item['birthday'] =birthday
        return  item

 解释:

  allowed_domains:定义允许访问的域名

  start_urls:登陆人人网后访问的URL

  start_requests:程序的开始函数,FormRequest定义了scrapy如何post提交数据,返回函数或迭代器,回调函数login。

  login:登陆人人网之后的爬虫处理函数,make_requests_from_url处理start_urls中的url,其默认的回调函数为parse

  parse:处理make_requests_from_url函数返回的结果

执行爬虫

scrapy crawl Person -o person.csv

查看结果:

  

原文地址:https://www.cnblogs.com/kongzhagen/p/6515626.html