Python3 Srcapy 爬虫
最近一直在理论学习,没有时间写博客。今天来一波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 爬虫的更多相关文章
- Python3.x爬虫教程:爬网页、爬图片、自己主动登录
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文将使用Python3.4爬网页.爬图片.自己主动登录.并对HTTP协议做了一个简单 ...
- Python3 网络爬虫(请求库的安装)
Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...
- 崔庆才Python3网络爬虫开发实战电子版书籍分享
资料下载地址: 链接:https://pan.baidu.com/s/1WV-_XHZvYIedsC1GJ1hOtw 提取码:4o94 <崔庆才Python3网络爬虫开发实战>高清中文版P ...
- python3网络爬虫系统学习:第一讲 基本库urllib
在python3中爬虫常用基本库为urllib以及requests 本文主要描述urllib的相关内容 urllib包含四个模块:requests——模拟发送请求 error——异常处理模块 pars ...
- Python3 常用爬虫库的安装
Python3 常用爬虫库的安装 1 简介 Windows下安装Python3常用的爬虫库:requests.selenium.beautifulsoup4.pyquery.pymysql.pymon ...
- 《Python3 网络爬虫开发实战》开发环境配置过程中踩过的坑
<Python3 网络爬虫开发实战>学习资料:https://www.cnblogs.com/waiwai14/p/11698175.html 如何从墙内下载Android Studio: ...
- 《Python3 网络爬虫开发实战》学习资料
<Python3 网络爬虫开发实战> 学习资料 百度网盘:https://pan.baidu.com/s/1PisddjC9e60TXlCFMgVjrQ
- python3版 爬虫了解
摘要:本文将使用Python3.4爬网页.爬图片.自动登录.并对HTTP协议做了一个简单的介绍.在进行爬虫之前,先简单来进行一个HTTP协议的讲解,这样下面再来进行爬虫就是理解更加清楚. 一.HTTP ...
- # Python3微博爬虫[requests+pyquery+selenium+mongodb]
目录 Python3微博爬虫[requests+pyquery+selenium+mongodb] 主要技术 站点分析 程序流程图 编程实现 数据库选择 代理IP测试 模拟登录 获取用户详细信息 获取 ...
随机推荐
- mysql 案例~mysql元数据的sql统计
一 简介:今天我们来收集下提取元数据的sql 二 前沿: information_schema 引擎 memory 元数据收集表 三 sql语句: 1#没有使用索引的表统计 SELECT t.TAB ...
- Eclipse文件路径
经常我们需要读取某个文件,一般情况下,在Eclipse工程中,路径为./src/....
- 解决bootstrap-table多次请求只触发一次的问题
在初始化table之前,要将table销毁,否则会保留上次加载的内容 1 $("#table").bootstrapTable('destroy'); 2 $("#tab ...
- 【ARTS】01_03_左耳听风-20181126~1202
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- /etc/my.cnf
[client] default-character-set=utf8 [mysqld] tmp_table_size = 2048M max_heap_table_size = 2048M max_ ...
- hdfs haadmin命令
HA集群启动后,我们可以通过一些指令来管理HDFS集群."bin/hdfs haadmin -DFSHAAdmin"指令,其可选参数: 1.-transitionToActive ...
- 程序执行的过程分析--【sky原创】
程序执行的过程: 比如我们要执行3 + 2 程序计数器(PC) = 指令地址 指令寄存器(IR) = 正在执行的命令 累加器(AC) = 临时存储体 那么实际上执行了三条指令 每条指令 ...
- spring初识
Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的.Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益. Sp ...
- JS正则表达式大全(附例子)
0 前言 正则表达式用来字符串匹配,格式校验,非常cool且有趣. 1 正则表达式中的特殊字符 \ 做为转义,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符" ...
- Day4--------------对文件的权限管理
一.文件权限 ls -l 显示当前文件详细信息 例: -rw-r--rwx.1 root root 1415 11月 9 20:21 anaconda-ks.cfg 依次顺序为:权限信 ...