标签:异步 div 可迭代对象 line parse install 配置 str 特定
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下
Scrapy主要包括了以下组件:
Scrapy运行流程大概如下:
Scrapy的安装:
Linux系统:
pip install scrapy
Windows系统:
a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted c. 进入下载目录,执行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl d. pip3 install pywin32 e. pip3 install scrapy
Scrapy基本使用
1.基本命令
# 创建项目 scrapy startproject corn # 进入项目 cd corn # 创建爬虫程序 scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider corn www.xxx.com) # 运行爬虫 scrapy crawl 爬虫名称(corn) --nolog
2.项目结构
3.编写代码
# -*- coding: utf-8 -*- import scrapy class XiaohuarSpider(scrapy.Spider): name = ‘xiaohuar‘ #爬虫程序名 # 允许爬取的域名(如果遇到非该域名的url则爬取不到数据) allowed_domains = [‘www.xxx.com‘] # 起始爬取的url start_urls = [‘http://www.xiaohuar.com/‘] # 访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll def parse(self, response): print(response.text) #获取字符串类型的响应内容 print(response.body)#获取字节类型的相应内容
4.修改配置(setting.py)
修改内容及其结果如下: 19行:USER_AGENT = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36‘ #伪装请求载体身份 22行:ROBOTSTXT_OBEY = False #可以忽略或者不遵守robots协议
5.执行爬虫程序
scrapy crawl xiaohuar(爬虫程序名字)
执行程序后就拿到了整个页面的数据
小试牛刀:
将糗事百科首页中段子的内容和标题进行爬取
# -*- coding: utf-8 -*- import scrapy class QiubaiSpider(scrapy.Spider): name = ‘qiubai‘ allowed_domains = [‘https://www.qiushibaike.com/‘] start_urls = [‘https://www.qiushibaike.com/‘] def parse(self, response): #xpath为response中的方法,可以将xpath表达式直接作用于该函数中 odiv = response.xpath(‘//div[@id="content-left"]/div‘) content_list = [] #用于存储解析到的数据 for div in odiv: #xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。 author = div.xpath(‘.//div[@class="author clearfix"]/a/h2/text()‘)[0].extract() content=div.xpath(‘.//div[@class="content"]/span/text()‘)[0].extract() #将解析到的内容封装到字典中 dic={ ‘作者‘:author, ‘内容‘:content } #将数据存储到content_list这个列表中 content_list.append(dic) return content_list
执行程序:
scrapy crawl 爬虫名称 :该种执行形式会显示执行的日志信息
scrapy crawl 爬虫名称 --nolog:该种执行形式不会显示执行的日志信息
标签:异步 div 可迭代对象 line parse install 配置 str 特定
原文地址:https://www.cnblogs.com/zycorn/p/10268498.html