Scrapy爬虫产生步骤

1、建立一个Scrarrpy爬虫工程

cmd命令提示符中选择目录

输入 scrapy start project name

#工程名不要含中文,否则之后生成爬虫时会报错

生成文件中的scrapy.cfg 部署Scrapy爬虫的配置文件

name/ Scrapy框架的用户自定义Python代码

_ init_.py 初始化脚本

items.py Items代码模板(继承类)

middlewares.cfg Middlewares代码模板(继承类)

pipelines.cfg Pipelines代码模板(继承类)

settings.cfg Scrapy爬虫的配置文件

spiders/ Spiders代码模板目录(继承类)

2、在工程中生成一个Scrapy爬虫

cmd命令提示符中选择建立的爬虫工程目录

输入scrapy genspider demo python123.io

生成文件demo.py

3、配置产生的spider爬虫

4、运行爬虫,爬取网页

cmd命令提示符中输入scrapy crawl desmon

(因为网站拒绝,所以运行失败)

# -*- coding: utf-8 -*-

import scrapy

class DesmonSpider(scrapy.Spider):

name = 'desmon'

allowed_domains = ['pthon123.io'] #访问的域名,只能爬取该域名下的

def start_requests(self):

urls={'http://pthon123.io/ws/demo.html'} #爬取页面的初始页面

for url in urls:

yield scrapy.Request(url=url,callback=self.parse)

def parse(self, response): #parse()用于处理响应,解析内容形成字典,发现新的URl爬取请求

fname=response.url.split('/')[-1]

with open(fname,'wb') as f:

f.write(response.body)

self.log('Save file %s.'% name)

yield关键字

yield与生成器相关

生成器是一个不断产生值的函数

包含yield语句的函数是一个生成器

生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

生成器相比一次列出所有内容的优势

更节省存储空间

响应更迅速

使用更灵活

Scrapy爬虫的基本使用

1、创建一个工程和Spider模板

2、编写Spider

3、编写Item Pipelines

4、优化配置策略

Request类

Request对象表示一个HTTP请求

由Spider生成,由Downloader执行

.url Request对应的请求URL地址

.method 对应的请求方法,‘GET’‘POST’等

.headers 字典类型风格的请求头

.body 请求内容主体,字符串类型

.meta 用户添加的扩展信息,在Scrapy内部模板间传递信息使用

.copy() 复制该请求

Respons类

Response对象表示一个HTTP相应

由Downloader生成,由Spider处理

.url Response对应的URL地址

.status HTTP状态码,默认为200

.headers Respose对应的头部信息

.body Response对应的内部信息,字符串类型

.flags 一组标记

.request 产生Response类型对应的Request对象

.copy() 复制该响应

Item类

Item对象表示一个从HTML页面中提取的信息内容

由Spider生成,由Item Pipelines处理

Item类似字典类型,可以按照字典类型操作

Scrapy爬虫支持多种HTML信息提取方法

Beautiful Soup

lxml

re

XPath Selector

CSS Selector

CSS Selector的基本使用

< HTML>.css(‘a::attr(href)’).extract() #a为标签名,href为标签属性

编写spider

class StockSpider(scrapy.Spider):

name = 'stock'

allowed_domains = ['baidu.com']

start_urls = ['http://quote.eastmoney.com/stocklist.html']

def parse(self, response):

for href in response.css('a::attr(href)').extract:

try:

stock=re.findall(r"[s][hz]\d{6}",href)[0]

url='https://guopiao.baidu.com/stock/'+stock+'.html'

yield scrapy.Request(url,callback=self.parse_stock)

except:

continue

def parse_stock(self,response):

infoDict={}

stockInfo=response.css('.stock-bets')

name=stockInfo.css('.bets-name').extract()[0]

keyList=stockInfo.css('dt').extract()

valueList=stockInfo.css('dd').extract

for i in range(len(keyList)):

key=re.findall(r'>.*

try:

val=re.findall(r'\d+\.?.*',valueList[i])[0][0:5]

except:

val='--'

infoDict[key]=val

infoDict.update({"股票名称":re.findall('\s.*\(',name)[0].split()[0]+

re.findall('\>.*

yield infoDict

编写piplines.py

class CestPipeline(object): #cest为工程名

def process_item(self, item, spider):

return item

class BaidustocksInfoPipeline(object):

def open_spoder(self,spider):

self.f=open('BaiduStockInfo.txt','w')

def close_spoder(self,spider):

self.f.close()

def process_item(self,item,spider):

try:

line=str(dict(item))+'\n'

self.f.write(line)

except:

pass

return item

优化settings.py

找到

#ITEM_PIPELINES = { 'CEST.pipelines.CestIPpeline': 300, }

修改为

ITEM_PIPELINES = { 'CEST.pipelines.CestIPInfopeline': 300, }

命令提示符中运行

scrapy crwal stock

配置并发连接选项

CONCURRENT_REQUESTS Downloader最大并发请求下载数量,moren32

CONCURRENT_ITEMS Item Pipeline最大并发ITEM处理数量,默认100

CONCURRENT_REQUESTS_PER_DOMAIN 每个目标名最大的并发请求数量,默认8

CONCURRENT_REQUESTS_PER_IP 每个目标IP最大的并发请求数量,默认0,非0有效

ps:实例仅供参考,因为网页原因不能爬取

ps:学习链接 https://www.icourse163.org/learn/BIT-1001870001?tid=1206951268#/learn/announce

python网络爬虫与信息提取北京理工大学ppt_北京理工大学Python网络爬虫与信息抽取学习笔记10,信息提取...相关推荐

  1. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  2. 【论文学习笔记-10】ActiveStereoNet(Google ECCV2018)主动式双目相机自监督学习立体匹配网络

    [论文学习笔记-10]ActiveStereoNet(Google ECCV2018)主动式双目相机自监督学习立体匹配网络) 自监督训练方法 Experiment ORAL 针对双目立体匹配中无监督存 ...

  3. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  4. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 顶...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  5. 学习笔记(10):Python网络编程并发编程-粘包现象

    立即学习:https://edu.csdn.net/course/play/24458/296240?utm_source=blogtoedu 粘包现象:服务器接收到客户端的命令后,进行执行得到结果后 ...

  6. python分块处理功能_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...

    一.信息提取模型 信息提取的步骤共分为五步,原始数据为未经处理的字符串, 第一步:分句,用nltk.sent_tokenize(text)实现,得到一个list of strings 第二步:分词,[ ...

  7. python nlp 句子提取_自然语言16.1_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...

    QQ:231469242 欢迎喜欢nltk朋友交流 http://www.cnblogs.com/undercurrent/p/4754944.html 一.信息提取模型 信息提取的步骤共分为五步,原 ...

  8. python网络编程web教程_python网络编程学习笔记(10):webpy框架

    django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站.它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架 ...

  9. 网络空间安全之信息追踪——学习笔记 利用门户网站,综合信息追踪

    企业信息追踪与防护: 对于一个公司来说,只要牵扯到公司任一信息,都可以称之为公司的机密文件! 知名门户网站搜索: 新华网:http://www.xinhuanet.com/ 党中央直接部署的,重大影响 ...

最新文章

  1. bert-as-service使用
  2. qps是什么意思_面试官:说说你之前负责的系统,QPS 能达到多少?
  3. 同一MODBUS读写多(两)个BH32角度传感器
  4. 多线程共用全局变量可能存在的威胁
  5. ListView图片不显示 Application.EnableVisualStyle bug
  6. 基于FPGA的电机控制设计(PWM)
  7. GridView 利用AspNetPager 分页时的自动编号
  8. 取火的N种方式:学好物理是野外求生第一步
  9. linux工作原理fiq,读Kernel感悟-Linux内核启动-内核的生成 - kernel hacker 修炼之道——李万鹏 - 博客频道 - CSDN...
  10. 去除input填充颜色
  11. 如何对Internet Marketing网络市场营销进行数据报表分析
  12. 【技术贴】解决开机本地连接出来慢,本地连接开机后出来时间慢
  13. 世界上最权威的68句创业名言
  14. 解压遇到压缩文件已损坏或者不可预料的压缩文件末端
  15. linux extended格式,Linux 下文件Non-ISO extended-ASCII编码问题
  16. Drate(小虫) 经典经历
  17. Mac M1 踩坑之Tensorflow安装 Processed finished with exit code 132
  18. SLM6500充电板的电磁干扰EMI措施
  19. 现在有什么地推项目_市场推广中谈到地推,地推是什么意思?
  20. oracle 中的pi,Oracle中实现圆周率计算(一)

热门文章

  1. matlab2c使用c++实现matlab函数系列教程-histc函数
  2. python时间库date和datetime
  3. matlab简单分析模拟滤波器 IIR
  4. ScheduledThreadPoolExecutor Usage
  5. Sql Server获取数据库名,表信息,字段信息,主键信息等
  6. Linux module 添加到bashrc 和临时ifort编译器 以及python2和3的配置
  7. Could not load type 'System.DateTimeOffset'的问题
  8. [转载] 比较器(Comparable和Comparator)、自然排序、定制排序
  9. 人事管理系统为你解剖JSP
  10. from Crypto.Cipher import AES报错