scrapy爬虫初体验
scrapy是一个python的爬虫框架,用于提取结构性数据。在这次宝贝计划1的项目中要用到一些数据。但四处联系后各方可能因为一些隐私问题不愿提供数据信息。这样我们只能自己爬取,存入数据库,再进行调用。
1.创建一个Scrapy项目:
scrapy startproject bback
执行命令创建项目后会自动生成一些文件如下:
- scrapy.cfg: 项目的配置文件
- bback/: 该项目的python模块。之后您将在此加入代码。
- bback/items.py: 项目中的item文件.
- bback/pipelines.py: 项目中的pipelines文件.
- bback/settings.py: 项目的设置文件.
- bback/spiders/: 放置spider代码的目录.
2.定义提取的Item
Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。
Item 配置如下
from scrapy.item import Item,Field
class BbackItem(Item):
# define the fields for your item here like:
# name = scrapy.Field()
name=Field()
3.编写爬虫(Spider)
Spider是用户编写用于从网站爬取数据的类。
其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。
为了创建一个Spider,必须继承 scrapy.Spider 类, 且定义以下三个属性:
name
: 用于区别Spider。该名字必须是唯一的。
start_urls
: 包含了Spider在启动时进行爬取的url列表,后续的URL是从初始的URL获取到的数据中提取。
parse()
是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
spider **
#!/usr/bin/python
# -*- coding:utf-8 -*-
from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy import log
from bback.items import BbackItem
class BbackSpider(Spider):
"""爬取标签"""
#log.start("log",loglevel='INFO')
name = "bback"
allowed_domains = ["baobeihuijia.com"]
start_urls = (
'http://baobeihuijia.com/list.aspx?tid=1&sex=&photo=1&page=1/',
)
def parse(self, response):
sel = Selector(response)
sites=sel.xpath('//div[@class="pic_bot"]/div[@class="pic_bota"]')
items=[]
for site in sites:
item = BbackItem()
name=site.xpath('input/@value').extract()
item['name']=[n.encode('utf-8') for n in name]
items.append(item)
#记录
log.msg("Appending item...",level='INFO')
log.msg("Append done.",level='INFO')
return items
4.pipelines.py实现对item的处理
在其中主要完成数据的查重、丢弃,验证item中数据,将得到的item数据保存等工作。代码如下:
import json
import codecs
class BbackPipeline(object):
def __init__(self):
self.file = codecs.open('bback_data_utf8.json', 'wb', encoding='utf-8')
def process_item(self, item, spider):
line = json.dumps(dict(item)) + '\n'
# print line
self.file.write(line.decode("unicode_escape"))
return item
tips:
1宝贝计划:是我们团队参加ImageCup的一个作品,此系统是在人脸识别系统Face++云端服务平台上搭建的应用。普通用只需下载此应用,即可上传用户在(逛街时或旅途中)遇到的疑似被拐儿童的照片到失踪儿童图片库进行人脸匹配。匹配完成后,会返回一组信息,如果匹配度高达70%以上,用户即可看到该儿童的基本信息。进而可与失踪儿童父母或相关部门取得联系,拯救失踪儿童.
爬虫demo下载链接
参考链接:
scrapy文档
scrapy wiki
binux大牛写的爬虫框架pyspider
网络爬虫与数据库操作
Some Experiences Of Using
scrapy 专栏
scrapy爬虫初体验的更多相关文章
- Node.js 网页瘸腿爬虫初体验
延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...
- Scrapy的初体验
上一节安装了python2和python3的开发环境 首先第一步:进入开发环境,workon article_spider 进入这个环境: 安装Scrapy,在安装的过程中出现了一些错误:通常这些错误 ...
- 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验
一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...
- 【Go 入门学习】第一篇关于 Go 的博客--Go 爬虫初体验
一.写在前面 其实早就该写这一篇博客了,为什么一直没有写呢?还不是因为忙不过来(实际上只是因为太懒了).不过好了,现在终于要开始写这一篇博客了.在看这篇博客之前,可能需要你对 Go 这门语言有些基本的 ...
- python2.7 爬虫初体验爬取新浪国内新闻_20161130
python2.7 爬虫初学习 模块:BeautifulSoup requests 1.获取新浪国内新闻标题 2.获取新闻url 3.还没想好,想法是把第2步的url 获取到下载网页源代码 再去分析源 ...
- python学习之爬虫初体验
作业来源: "https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2851" ** 1.简述爬虫原理 通用爬虫 即(搜索 ...
- Java爬虫初体验
年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...
- appium+夜神模拟器+python安卓app爬虫初体验
环境搭建:Windows 7 64bit jdk包:jdk-8u171-windows-x64.exe(http://www.oracle.com/technetwork/java/javase/do ...
随机推荐
- spring 定时任务(3)--配置多个定时任务
<!-- 定义调用对象和调用对象的方法 --> <!-- 定时任务 A start --> <bean id="jobtask" class=&quo ...
- poj 2516 (费用流)
题意:有N个供应商,M个店主,K种物品.每个供应商对每种物品的的供应量已知,每个店主对每种物品的需求量的已知,从不同的供应商运送不同的货物到不同的店主手上需要不同的花费,又已知从供应商m送第k种货物的 ...
- z-index解决弹出层遮罩层覆盖子div不能显示输出的问题
// 添加以下代码来进行测试: // ajax 发生错误,就会执行$('body').ajaxError(function(e, xhr, setting, text){ // e - even ...
- easyui combo自动高度(下拉框空白问题)
设置.combo-panel {max-height:200px;} 在用到easyui-combobox时,设置panelHeight:'auto'
- js、jquery、css使用过程中学到的一些方法技巧
快速查看 1 动态创建script/link/style标签 2 在不适合使用iframe的情况下,让页面像iframe那样能分块滚动 3 鼠标在元素上时显示tip风格的提示信息 1.动态创建scr ...
- IntPtr问题
public aaa(IntPtr myPtr,int left, int top, int width, short height) 这里myPtr应该是对应到一块内存,你需要查看aaa函数是如何把 ...
- JNI加载Native Library 以及 跨线程和Qt通信
Part1 Java Native Interface-JNI-JAVA本地调用 JNI标准是Java平台的一部分, 允许Java代码和其他语言进行交互; 开始实现-> Step 1) 编写Ja ...
- 贝叶斯网络基础(Probabilistic Graphical Models)
本篇博客是Daphne Koller课程Probabilistic Graphical Models(PGM)的学习笔记. 概率图模型是一类用图形模式表达基于概率相关关系的模型的总称.概率图模型共分为 ...
- DWZ 框架remote 验证字段唯一性方法提交后台,如果是中文会显示成乱码问题
关于jquery remote 验证字段唯一性方法提交后台,如果是中文会显示成乱码问题.可以直接修改tomcat 配置文件server.xml 设置 URIEncoding=utf-8属性,将ge ...
- Jsoup小Demo
Jsoup小Demo public class JsoupUtil { public void parseWangYi() { Document doc = null; try { //eg1:解析百 ...