最近一直在理论学习,没有时间写博客。今天来一波Python爬虫,为机器学习做数据准备。

爬虫配置环境 Anaconda3 + Spyder + Scrapy

Anaconda 安装就不绍了,网上很多。下面简单介绍一Scrapy的安装,重点介绍Scrapy编写爬虫

#Scrapy 安装
conda install scrapy

Scrapy安装好后,开始第一个项目:

#打开cmd终端或者Anaconda 自带的Anaconda Prompt,本人极力推荐后者
scrapy startproject project_name
#project_name 是项目名称,不能带有路径比如H:/Python/project_name这种格式是不行
scrapy startproject zhufang #这是我写的项目名称

小说明:使用scrapy 创建好项目后,Spyder中无法识别到这个项目的(Pycharm可以识别到)。在这里可以先在Spyder中建立一个空项目,然后把scrapy建立好的项目整个文件夹拷贝到Spyder建立好的空文件夹下。实例如下:

#打开Anaconda Prompt 执行以下命令
H:
cd Python\zhufang
scrapy startproject zhufang

建立好项目后,在打开Spyder,找到项目,可以看到如下图所示的文件目录结构。其中的ganji.py 和zhufang.db是我自己后来建的。ganji.py 是主要核心部分,zhufang.db是数据库文件,使用python自带的sqlite3建立的。文件的其他说明我就不班门弄釜了,我在网上找到一个写的很全的文章,分享给大家 http://python.jobbole.com/86405/

我在写爬虫遇到一个最困惑的问题就是不知道爬虫的入口哪里,以及如何自动跳转到下一页面爬取。最后这个问题归结到了start_requests函数,将其重写,按照要爬取的目标网站的网址URL所遵循的规律写。下面附上本次爬虫经历的所有代码

# -*- coding: utf-8 -*-
#ganji.py import scrapy
from zhufang.items import ZhufangItem class GanJiSpyder(scrapy.Spider): name = "ganji";
URL = "http://dl.ganji.com/fang1/";
#下一页地址
#http://dl.ganji.com/fang1/o{pagenum}/
#url_change = "o1";
start_urls = [];
start_page = 1;
end_page = 10;
#重写start_requests 爬虫的入口
def start_requests(self):
pages = [];
while self.start_page <= self.end_page:
url = self.URL + 'o' + str(self.start_page);
#self.start_urls.append(url);
#请求url
page = scrapy.Request(url);
self.start_page = self.start_page + 1;
pages.append(page);
return pages; def parse(self,response):
#print(response);
price_list = response.xpath("//div[@class='f-list-item ershoufang-list']/dl[@class='f-list-item-wrap f-clear']/dd[@class='dd-item info']/div[@class='price']/span[1]/text()").extract();
title_list = response.xpath("//div[@class='f-list-item ershoufang-list']/dl[@class='f-list-item-wrap f-clear']/dd[@class='dd-item title']/a/text()").extract();
zf = ZhufangItem(); for t,p in zip(title_list,price_list):
#将数据存入item中,与Items 文件中定义的字段对应
zf['title'] = t;
zf['price'] = p;
yield zf; #回调失败
# yield scrapy.Request(URL + url_change, callback = parse) #print("%s : %s" % (t,p));
# -*- coding: utf-8 -*-

#piplines.py
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
#管道文件 将爬到的数据在这里清理 存入数据库 import sqlite3 class ZhufangPipeline(object):
#重写爬虫开始函数
def open_spider(self,spider):
#连接数据库
self.con = sqlite3.connect("zufang.db");
self.cu = self.con.cursor(); def process_item(self, item, spider):
#print(spider.name);
sql_insert = "insert into info (title,price) values('{}','{}')".format(item["title"],item["price"]);
#print(sql_insert);
self.cu.execute(sql_insert);
self.con.commit();
return item #重写爬虫结束函数
def spider_close(self,spider):
self.con.close();
#setting.py
# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
#标记ZhufangPipeline 这个类 ,后面的值范围【1,1000】,根据值的大小依次顺序执行
'zhufang.pipelines.ZhufangPipeline': 300,
}
# -*- coding: utf-8 -*-
#items.py
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html import scrapy #数据通过items文件中的ZhufangItem类才能传回到管道文件pipelines中
class ZhufangItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#pass
#定义字段
title = scrapy.Field();
price = scrapy.Field();

最后,由于项目中有文件夹的嵌套,在模块引用的时候可能会出现问题,在这里也附上一个很好的文章 https://www.cnblogs.com/ArsenalfanInECNU/p/5346751.html

Python3 Srcapy 爬虫的更多相关文章

  1. Python3.x爬虫教程:爬网页、爬图片、自己主动登录

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文将使用Python3.4爬网页.爬图片.自己主动登录.并对HTTP协议做了一个简单 ...

  2. Python3 网络爬虫(请求库的安装)

    Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...

  3. 崔庆才Python3网络爬虫开发实战电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1WV-_XHZvYIedsC1GJ1hOtw 提取码:4o94 <崔庆才Python3网络爬虫开发实战>高清中文版P ...

  4. python3网络爬虫系统学习:第一讲 基本库urllib

    在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 pars ...

  5. Python3 常用爬虫库的安装

    Python3 常用爬虫库的安装 1 简介 Windows下安装Python3常用的爬虫库:requests.selenium.beautifulsoup4.pyquery.pymysql.pymon ...

  6. 《Python3 网络爬虫开发实战》开发环境配置过程中踩过的坑

    <Python3 网络爬虫开发实战>学习资料:https://www.cnblogs.com/waiwai14/p/11698175.html 如何从墙内下载Android Studio: ...

  7. 《Python3 网络爬虫开发实战》学习资料

    <Python3 网络爬虫开发实战> 学习资料 百度网盘:https://pan.baidu.com/s/1PisddjC9e60TXlCFMgVjrQ

  8. python3版 爬虫了解

    摘要:本文将使用Python3.4爬网页.爬图片.自动登录.并对HTTP协议做了一个简单的介绍.在进行爬虫之前,先简单来进行一个HTTP协议的讲解,这样下面再来进行爬虫就是理解更加清楚. 一.HTTP ...

  9. # Python3微博爬虫[requests+pyquery+selenium+mongodb]

    目录 Python3微博爬虫[requests+pyquery+selenium+mongodb] 主要技术 站点分析 程序流程图 编程实现 数据库选择 代理IP测试 模拟登录 获取用户详细信息 获取 ...

随机推荐

  1. 关于Laravel 无法下载的问题

    今天在git bush用composer安装laravel5.5卡住了,无法下载 解决办法:更换到国内源,就可以下载了 运行命令: composer config -g repo.packagist ...

  2. 【转贴】Linux下MySQL 5.5的修改字符集编码为UTF8(彻底解决中文乱码问题)

    原文地址; http://www.ha97.com/5359.html PS:昨天一同事遇到mysql 5.5中文乱码问题,找我解决.解决了,有个细节问题网上没人说,我就总结一下. 一.登录MySQL ...

  3. android 服务解析

    https://blog.csdn.net/luoyanglizi/article/details/51586437 2.service和Thread的区别 定义上: thread是程序运行的最小单元 ...

  4. Salt Document学习笔记1

    原文来自Salt Documentation,作者是 Thomas Hatch),我摘抄部分可能今后会用到或适合入门到精通的一些原文段落,简单翻译后发上来,便于查阅和研究 一.原理方面:The net ...

  5. 【转】如何安装JDK以及配置Java运行环境

    具体的参考这篇博文就好了~~!http://www.cnblogs.com/liu-en-ci/p/6743106.html

  6. iOS 中的Certificate,Provisioning Profile 的一些注意 (不断完善中)

    注册apple id 有1年多了,这些概念还是模模糊糊的,决定在这里总结一下. 请参阅官方文档 App Distribution Guide code singing的作用如下: Code signi ...

  7. 关于z-index的那些事儿

    关于z-index的真正问题是,很少有人理解它到底是怎么用.其实它并不复杂,但是如果你从来没有花一定时间去看具体的z-index相关文档,那么你很可能会忽略一些重要的信息. 不相信我吗?好吧,看看你能 ...

  8. vue2的缓存问题(非原创)

    keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法: 运行结果描述: input输入框内,路由切换输入框内部的内容不会发生改变. 常见的用法:(下图 ...

  9. jvm字节占用空间分析

    一个对象实例占用了多少字节,消耗了多少内存?这样的问题在c或c++里使用sizeof()方法就可以得到明确答案,在java里好像没有这样的方法(java一样可以实现),不过通过jmap工具倒是可以查看 ...

  10. SeaJS入门教程系列之完整示例(三)

    一个完整的例子上文说了那么多,知识点比较分散,所以最后我打算用一个完整的SeaJS例子把这些知识点串起来,方便朋友们归纳回顾.这个例子包含如下文件: 1.index.html——主页面.2.sea.j ...