scrapy框架学习,编写爬虫爬取“贷联盟”这个网站的P2P网络贷款黑名单。目标网址:http://www.dailianmeng.com/p2pblacklist/index.html?P2pBlacklist_page=1。
遇到的问题:用scrapy将爬取的结果保存为json文件,保存的中文格式默认为Unicode编码,参考网络上的文章,修改pipelines.py、settings.py两个文件,将编码转换。
(这里还涉及到Unicode和utf-8编码的问题,之前我理解有误,在此一并记录,点这里查看。)

过程记录:

步骤一:新建项目

Xiang$ scrapy crawl dailianmeng

步骤二:修改items.py

  1. # -*- coding: utf-8 -*-
  2. # Define here the models for your scraped items
  3. #
  4. # See documentation in:
  5. # http://doc.scrapy.org/en/latest/topics/items.html
  6. from scrapy.item import Item,Field
  7. class DailianmengItem(Item):
  8.     # define the fields for your item here like:
  9.     # name = scrapy.Field()
  10.     name = Field()
  11.     address = Field()
  12.     id_card = Field()
  13.     phone = Field()
  14.     email = Field()

步骤三:修改pipelines.py

  1. # -*- coding: utf-8 -*-
  2. # Define your item pipelines here
  3. #
  4. # Don’t forget to add your pipeline to the ITEM_PIPELINES setting
  5. # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
  6. import json
  7. import codecs
  8. class DailianmengPipeline(object):
  9.     def __init__(self):
  10.         self.file = codecs.open(‘items.json’, ‘w’, encoding=’utf-8′)
  11.     def process_item(self, item, spider):
  12.         line = json.dumps(dict(item)) + “\n”
  13.         self.file.write(line.decode(‘unicode_escape’))
  14.         return item

步骤四:修改settings.py

  1. # -*- coding: utf-8 -*-
  2. BOT_NAME = ‘dailianmeng’
  3. SPIDER_MODULES = [‘dailianmeng.spiders’]
  4. NEWSPIDER_MODULE = ‘dailianmeng.spiders’
  5. # Crawl responsibly by identifying yourself (and your website) on the user-agent
  6. #USER_AGENT = ‘dailianmeng (+http://www.yourdomain.com)’
  7. ITEM_PIPELINES = {
  8.     ‘dailianmeng.pipelines.DailianmengPipeline’:300
  9. }

步骤五:新建spider文件:dailianmeng_spider.py

  1. # -*- coding: utf-8 -*-
  2. # import scrapy
  3. from scrapy import Spider,Selector
  4. from scrapy.http import Request
  5. from dailianmeng.items import DailianmengItem
  6. u1 = ‘http://www.dailianmeng.com’
  7. class PadSpider(Spider):
  8.     name = ‘dailianmeng_com’
  9.     allowed_domains = [‘dailianmeng.com’]
  10.     start_urls = []
  11.     u1 = ‘http://www.dailianmeng.com/p2pblacklist/index.html?P2pBlacklist_page=’
  12.     for i in range(172):
  13.         url = u1 + str(i + 1)
  14.         start_urls.append(url)
  15.     def parse(self,response):
  16.         sel = Selector(response)
  17.         #以下代码含义:所有具有class=”rsltGrid prod celwidget”属性的div元素
  18.         sites = sel.xpath(‘//tr[@class=”odd”]’)
  19.         items = []
  20.         for site in sites:
  21.             item = DailianmengItem()
  22.             #此处需要注意,site.xpath(‘a/text()’).extract() 是一个数组 list
  23.             item[‘address’] = ”
  24.             item[‘id_card’] = site.xpath(‘td[2]/text()’).extract()[0]
  25.             item[‘name’] = site.xpath(‘td[1]/text()’).extract()[0]
  26.             item[‘phone’] = site.xpath(‘td[3]/text()’).extract()[0]
  27.             item[‘email‘] = site.xpath(‘td[4]/text()’).extract()[0]
  28.             # item[‘url’] = u1 + site.xpath(‘a/@href’).extract()[0]
  29.             items.append(item)
  30.         return items

步骤六:开始爬取

在shell下执行以下命令,记得在项目文件夹下执行:

Xiang$ scrapy crawl dailianmeng_com

继续阅读 用scrapy爬取“贷联盟”网站的P2P网络贷款黑名单