scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)
1.网页解析
当当网中,人工智能数据的首页url如下为http://category.dangdang.com/cp01.54.12.00.00.00.html
点击下方的链接,一次观察各个页面的url变化,发现每一页的url规律如下:在进行页面切换时除第一页外,其他页面的url变化规律为只有pg后的数字会随着页面的不同而变化,并且和页面数相同,我们就可以利用此规律,运用spider类来对每一个这样的页面信息进行爬取,并且符合此种规律的页面均可以按照同样的方式来爬取;
第1页:http://category.dangdang.com/cp01.54.12.00.00.00.html
第2页:http://category.dangdang.com/pg2-cp01.54.12.00.00.00.html
第3页:http://category.dangdang.com/pg3-cp01.54.12.00.00.00.html
第4页:http://category.dangdang.com/pg4-cp01.54.12.00.00.00.html
2. scrapy 具体实现代码
目标:爬取当当网上人工智能类数据的名称和价格,如下图:
2.1)项目结构:
2.2)book.py代码
# -*- coding: utf-8 -*-
import scrapy
# 导入items中的类
from dangdang04.items import Dangdang04Item class BookSpider(scrapy.Spider):
name = "book"
allowed_domains = ["category.dangdang.com"]
url = 'http://category.dangdang.com/'
offset = 1
start_urls = [url + 'cp01.54.12.00.00.00.html'] def parse(self, response):
# 实例化类
item = Dangdang04Item()
# 定义提取规则,返回selector对象
book_list = response.xpath('//ul[@class="bigimg"]/li')
for book_info in book_list:
# 书的名称
item['name'] = book_info.xpath('./p[@class="name"]/a/@title').extract()[0]
# 书的价格
item['price'] = book_info.xpath('./p[@class="price"]/span[1]/text()').extract()[0]
yield item if self.offset < 80:
# 构建新的url再次发送请求
self.offset += 1
url = self.url + 'pg' + str(self.offset) + '-cp01.54.12.00.00.00.html'
yield scrapy.Request(url,callback=self.parse)
2.3)items.py代码
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html import scrapy class Dangdang04Item(scrapy.Item):
# 图书名称
name = scrapy.Field()
# 价格
price = scrapy.Field()
2.4)pipelines.py代码
# -*- coding: utf-8 -*-
# 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 json class Dangdang04Pipeline(object):
def __init__(self):
# 定义json文件,用于写入爬取的目标信息
self.filename = open('booklist.json','w')
def process_item(self, item, spider):
# 将item数据转换乘json格式数据
text = json.dumps(dict(item),ensure_ascii = False) + '\n'
# 将text数据写入本地文件中
self.filename.write(text.encode('utf-8'))
return item def close_spider(self,spider):
# 爬虫结束,关闭本地文件
self.filename.close()
2.5).settings.py文件对应设置
# user-agent设置
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'
# 下载延迟设置
DOWNLOAD_DELAY = 2.5
# 关键文件配置
ITEM_PIPELINES = {
'dangdang04.pipelines.Dangdang04Pipeline': 300,
}
scrapy项目3:爬取当当网中机器学习的数据及价格(spider类)的更多相关文章
- scrapy项目4:爬取当当网中机器学习的数据及价格(CrawlSpider类)
scrapy项目3中已经对网页规律作出解析,这里用crawlspider类对其内容进行爬取: 项目结构与项目3中相同如下图,唯一不同的为book.py文件 crawlspider类的爬虫文件book的 ...
- Scrapy爬虫(5)爬取当当网图书畅销榜
本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下: 我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...
- python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍
来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
- python爬取当当网的书籍信息并保存到csv文件
python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...
- python爬取返利网中值得买中的数据
先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy 查找目标数据使用的是beautifulsoup模块. 1.观察网页,寻找规律 打开值得买这块内容 1>分析 ...
- java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- 【转】java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- selenium自动化测试工具模拟登陆爬取当当网top500畅销书单
selenium自动化测试工具可谓是爬虫的利器,基本动态加载的网页都能抓取,当然随着大型网站的更新,也出现针对selenium的反爬,有些网站可以识别你是否用的是selenium访问,然后对你加以限制 ...
随机推荐
- python 并发编程 协程 协程介绍
协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的 需要强调的是: 1. python的线程属于内 ...
- excel常用公式--逻辑运算类
if: IF(logical_test, value_if_true, [value_if_false]). and: 逻辑判断,相当于“并”. or: 逻辑判断,相当于“或”.
- MyBatis时间排序问题
在数据中create_time字段是DateTime类型, 逆向工程后实体类中对应的成员变量类型为Date 时间排序代码为: 测试结果: 时间排序错乱. 解决方法: 1,在数据库创建varchar类型 ...
- Codeforces 1220C. Substring Game in the Lesson
传送门 首先显然的,如果 $l$ 能移动,那么 $r$ 一定可以随便移动,如果 $l$ 不动,那么 $r$ 一定不能动 那么我们现在只要考虑 $l$ 的移动即可 考虑找到位置 $k$ 之前的最左边的最 ...
- P1397 [NOI2013]矩阵游戏
传送门 首先显然可以矩乘快速幂然后 $T$ 飞 看一眼题解发现因为这一题矩阵的特殊性所以可以对矩阵的次数欧拉降幂 然而我并不懂证明,所以我选择暴力乱搞的做法 十进制快速幂,然后注意一下常数,还有矩阵乘 ...
- 腾讯万亿级分布式消息中间件TubeMQ正式开源
TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,T ...
- xampp配置多域名
重要的事情: 前提: vhost.conf被引入 修改两个文件,文件所在路径,看图片上sublime编辑器,hosts和vhost.conf配置的域名必须一致 参考文档:http://blog.csd ...
- kali 下安装 vmtools
网上的教程都是默认路径下的,kali是定制版本的,路径不同,所以首先要找到media下安装包的路径,然后进入该路下,将安装包复制到想要的路径下,并解压缩到想要的路径下,剩下的就跟网上的差不多了,即找到 ...
- id - 显示真实和有效的 UID 和 GID
总览 (SYNOPSIS) id [OPTION]... [USERNAME] 描述 (DESCRIPTION) 显示 USERNAME 或者 当前 用户 的 信息. -a 忽略, 同 其它 版本 兼 ...
- zabbix 图形注释乱码
1.寻找字体文件 1.1 首先需要找到zabbix后台的字体文件路径,字体文件的后缀为.ttf [root@zabbix ~]# cd /usr/share/zabbix/ [root@zabbix ...