爬虫scrapy模块
首先下载scrapy模块
这里有惊喜
https://www.cnblogs.com/bobo-zhang/p/10068997.html
创建一个scrapy文件
首先在终端找到一个文件夹
输入
scrapy startproject jy (项目件名)
修改setting文件配置
# Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'# Obey robots.txt rules ROBOTSTXT_OBEY = Fals
cd 到 spiders文件,在终端创建一个文件
scrapy genspider myjy(文件名) www.xxx.com
在文件里执行我们的第一个代码吧
#实现解析+持久化存储
# -*- coding: utf-8 -*-import scrapy class FirstSpider(scrapy.Spider):#爬虫文件的名称 name = 'first' #允许的域名 #allowed_domains = ['www.xxx.com'] #起始url列表 start_urls = ['https://www.qiushibaike.com/text/']#实现了数据的基本解析操作 # def parse(self, response): # div_list = response.xpath('//div[@id="content-left"]/div') # for div in div_list: # #author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract() # #如果可以保证xpath返回的列表中只有一个列表元素则可以使用extract_first(),否则必须使用extract() # author = div.xpath('./div[1]/a[2]/h2/text()').extract_first() # content = div.xpath('./a[1]/div/span//text()').extract() # content = ''.join(content) # print(author,content) #实现解析+持久化存储 #1.基于终端指令的持久化存储 # 只可以将parse方法的返回值持久化存储到本地的文本中 #2.基于管道的持久化存储 # 1.基于终端指令的持久化存储 def parse(self, response): div_list = response.xpath('//div[@id="content-left"]/div') all_data = []for div in div_list:#author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract() #如果可以保证xpath返回的列表中只有一个列表元素则可以使用extract_first(),否则必须使用extract() author = div.xpath('./div[1]/a[2]/h2/text()').extract_first() content = div.xpath('./a[1]/div/span//text()').extract() content = ''.join(content) dic = {'author':author, 'content':content } all_data.append(dic) return all_data
最后运行文件
scrapy crawl myjy
#解析+管道持久化存储
首先在psrse里写入文件
# -*- coding: utf-8 -*- import scrapyfrom bossPro.items import BossproItem class BossSpider(scrapy.Spider):name = 'boss'# allowed_domains = ['www.xxx.com']start_urls = ['https://www.zhipin.com/job_detail/?query=python%E7%88%AC%E8%99%AB&scity=101010100&industry=&position=']url = 'https://www.zhipin.com/c101010100/?query=python爬虫&page=%d&ka=page-2'page = 1#解析+管道持久化存储def parse(self, response):li_list = response.xpath('//div[@class="job-list"]/ul/li')for li in li_list:job_name = li.xpath('.//div[@class="info-primary"]/h3/a/div/text()').extract_first()salary = li.xpath('.//div[@class="info-primary"]/h3/a/span/text()').extract_first()company = li.xpath('.//div[@class="company-text"]/h3/a/text()').extract_first()#实例化一个item对象item = BossproItem()#将解析到的数据全部封装到item对象中item['job_name'] = job_nameitem['salary'] = salaryitem['company'] = company#将item提交给管道yield itemif self.page <= 3:print('if 执行!!!')self.page += 1new_url = format(self.url%self.page)print(new_url)#手动请求发送yield scrapy.Request(url=new_url,callback=self.parse)
配置items.py文件,用来作为数据结构
import scrapyclass BossproItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()job_name = scrapy.Field()salary = scrapy.Field()company = scrapy.Field()
在pipelines.py里写入文件
# -*- coding: utf-8 -*-# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport pymysql from redis import Redis class BossproPipeline(object):fp = Nonedef open_spider(self, spider):print('开始爬虫......')self.fp = open('./boss.txt','w',encoding='utf-8')def close_spider(self, spider):print('结束爬虫......')self.fp.close()#爬虫文件每向管道提交一次item,则该方法就会被调用一次.#参数:item 就是管道接收到的item类型对象def process_item(self, item, spider):#print(item)self.fp.write(item['job_name']+':'+item['salary']+':'+item['company']+'\n')return item #返回给下一个即将被执行的管道类class mysqlPileLine(object):conn = Nonecursor =Nonedef open_spider(self,spider):self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='',db='scrapy',charset="utf8")print(self.conn)def process_item(self, item, spider):self.cursor = self.conn.cursor()# print(item)#print('insert into boss values ("%s","%s","%s")'%(item['job_name'],item['salary'],item['company']))try:print('insert into boss values ("%s","%s","%s")'%(item['job_name'],item['salary'],item['company']))self.cursor.execute('insert into boss values ("%s","%s","%s")'%(item['job_name'],item['salary'],item['company']))self.conn.commit()except Exception as e:print(e)self.conn.rollback()def close_spider(self,spider):self.conn.close()self.cursor.close()class redisPileLine(object):conn = Nonedef open_spider(self,spider):self.conn = Redis(host='127.0.0.1',port=6379)print(self.conn)def process_item(self, item, spider):# print(item)dic = {'name':item['job_name'],'salary':item['salary'],'company':item['company']}self.conn.lpush('boss',dic)
别忘了在setting里面配置
ITEM_PIPELINES = {# 'boss.pipelines.BossPipeline': 300,'boss.pipelines.redisPipeline': 301,# 'boss.pipelines.mysqlPipeline': 302, }
转载于:https://www.cnblogs.com/zhangqing979797/p/10458393.html
爬虫scrapy模块相关推荐
- 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url
第三百二十六节,web爬虫,scrapy模块,解决重复url--自动递归url 一般抓取过的url不重复抓取,那么就需要记录url,判断当前URL如果在记录里说明已经抓取过了,如果不存在说明没抓取过 ...
- 安装scrapy模块,创建一个Scrapy爬虫项目,并运行
创建一个Scrapy项目,首先需要所需要的模块 一丶安装scrapy框架所有模块 1.第一个安装的依赖库是lxml ,命令是: pip install lxml 2.第二个依赖库是pyOpenSSL, ...
- 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签...
第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 ...
- 第三百二十四节,web爬虫,scrapy模块介绍与使用
第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为 ...
- python 爬虫 scrapy 和 requsts 哪个快_Scrapy爬虫框架结构以及和Requests库的比较
爬虫框架 *爬虫框架是实现爬虫功能的一个软件结构和功能组件集合 *爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫 Scrapy爬虫框架结构 "5+2"结构 Spiders(用户 ...
- python 爬虫框架_Python网络爬虫-scrapy框架的使用
1. Scrapy 1.1 Scrapy框架的安装 Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted .lxml和pyOpenSSL.在不同的平台环境下,它所依赖 ...
- python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250
0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例.所以找了很多实 ...
- 从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- Python爬虫——Scrapy 的基本使用
文章目录 Python爬虫--Scrapy 的基本使用 1.创建 Scrapy 爬虫项目 2.Scrapy-创建爬虫文件 3.Scrapy-运行爬虫文件 Python爬虫--Scrapy 的基本使用 ...
最新文章
- nChain首席科学家CSW:闪电网络会把BCE变成空洞的幽灵
- 解决vscode格式化vue文件出现的问题
- 李东生:管理者不能变成诸葛先生
- android 自定义水波纹点击效果Button
- 一题多解(八)—— 矩阵上三角(下三角)的访问
- PouchContainer 开源版本及内部版本一致性实践
- LibSvm使用说明和LibSvm源码解析
- Java程序设计以及实验指导 实验笔记
- 58失去“神奇”魔法
- wav是什么格式?怎么转成mp3?
- js对象扁平化:Javascript对象进行扁平化处理
- Ext.js 自定义桌面注意
- 怎么在第一个 PDF 文件的中间,插入第二个 PDF 文件的内容?
- 基于神经网络的车牌识别,卷积神经网络车牌识别
- 数据结构与算法《二分查找》
- 解决英伟达CUDA和cuDNN下载过慢的问题
- 滴滴柳青:一个比你有才,又比你努力的富二代!
- Kali [dnsenum]子域名查询工具
- 小红书能往天猫引流吗?精准大揭秘
- 噪音声压和声功率的区别_声学基础知识(三):声压、声功率和声强的联系与区别-下...
热门文章
- Python sum函数- Python零基础入门教程
- PWN题[强网先锋]no_output
- linux 镜像错误,VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057)
- java设计模式之道文字版,Java Web设计模式之道 PDF
- python123九宫格输入法_《啊哈C语言-2016最新修正版》.pdf
- MySql和Oracle数据库的区别?
- oracle的一些基本操作,Oracle中的一些基本操作
- 【Java中级篇】动态代理机制
- 1445.32php,nginx实现mysql的负载均衡
- 《软件项目管理(第二版)》第 2 章——项目准备和启动 重点部分总结