6.1.Scrapy项目
Scrapy项目(未登录的情况下)
首先,我们从不需要登录的场景下设计scrapy项目,我们使用scrapy获取信息。我们创建scrapy项目:
(env) ....\TempStack>scrapy startproject book
我们首先在items中定义我们需要的Item:
import scrapyclass BookItem(scrapy.Item):name = scrapy.Field() # 书名ratings = scrapy.Field() # 评分content = scrapy.Field() # 综合信息内容
然后实现spider,我们命名为bookspider.py
:
import scrapy
from book.items import BookItemclass BookSpider(scrapy.Spider):# 爬虫的名字, 用于运行项目指明爬虫是哪一个name = 'book-spider'allowed_domains = ['xxx.com']start_urls = ['https://book.xxx.com/top250']def parse(self, response):# 请求第一页yield scrapy.Request(response.url, callback=self.parse_next)# 请求其它页for page in response.xpath('//div[@class="paginator"]/a'):link = page.xpath('@href').extract()[0]# 将当前link放进请求,# 虽然每次请求其他页时会遇到之前已经请求过的URL, 但scrapy可以帮助我们自动过滤已处理的URLyield scrapy.Request(link, callback=self.parse_next)def parse_next(self, response):for item in response.xpath('//tr[@class="item"]'):book = BookItem()# XPath说明: td[2]/div[1]/a/@title中, td[2]表示tr[@class="item"]下的第二个td元素book['name'] = item.xpath('td[2]/div[1]/a/@title').extract()[0]book['content'] = item.xpath('td[2]/p/text()').extract()[0]book['ratings'] = item.xpath('td[2]/div[2]/span[2]/text()').extract()[0]yield book
运行项目:
(env) ....\TempStack\book>scrapy crawl book-spider -o book_info.csv
注意,运行需要指定spider的名称。收集到的内容日志打印如下:
{'content': '[以色列] 尤xxx利 / 林x宏 / 中xxx社 / 2014-11 / 6xx0元','name': '人xx史','ratings': '9.1'}
...
{'content': 'J.K.罗琳 (J.K.Rowling) / 苏农 / 人xxxx社 / 2xxxxx1 / 4xxx0元','name': '哈xx特','ratings': '9.7'}
基于cookie登录
现在,考虑使用scrapy添加cookie信息,这样可以做到简单快捷,但也是不稳定的。
我们将此任务建立在之前的项目book
下,这里,我们仅演示scrapy基于cookie登录。
我们打开已登录的页面,使用开发工具找到cookie,复制值,但是这个值是适合requests但不适合scrapy的格式,所以要进行格式转换,转换成字典:
import restrs = 'viewed="26397183"; ...; __utmb=30149280.47.10.1643374436'
strList = re.split(r';\S*', strs)
cookie = {}
for items in strList:item = items.split('=')key, value = item[0], item[1]cookie[str(key)] = str(value)
print(cookie)
我们创建一个新的spider,并复制新的cookie格式,只要在scrapy.Request
请求中加入cookie信息,就实现了对应网页的cookie登录:
import scrapyclass LoginSpider(scrapy.Spider):name = 'login'allowed_domains = ['xxx.com']start_urls = ['https://www.xxxx.com/people/2122xxx46/']profile_url = "https://www.xxxx.com/people/2122xxx46/"cookie = {'viewed': '"26397183"', ..., ' __utmb': '30149280.47.10.1643374436'}def start_requests(self):yield scrapy.Request(self.profile_url, callback=self.parse_profile, cookies=self.cookie)def parse_profile(self, response):print(response.text)
6.1.Scrapy项目相关推荐
- pycharm创建scrapy项目教程及遇到的坑
最近学习scrapy爬虫框架,在使用pycharm安装scrapy类库及创建scrapy项目时花费了好长的时间,遇到各种坑,根据网上的各种教程,花费了一晚上的时间,终于成功,其中也踩了一些坑,现在整理 ...
- 爬虫学习笔记(十三)—— scrapy-redis(二):存储到MySQL、Scrapy项目部署
文章目录 一.小案例:爬取纵横小说(RedisCrawlSpider) 1.1.spider文件 1.2.settings文件 二.redis数据存储到MySQL 三.Scrapy 项目部署 3.1. ...
- 在pycharm创建scrapy项目
在pycharm创建scrapy项目 步骤很简单,直接进入主题. 第一步: 创建一个python项目.解析器什么的自己选择,环境目录默认就好. 第二步: 下载scrapy,步骤file->set ...
- Scrapy入门(二)创建Scrapy项目
创建一个Scrapy项目 定义提取的Item 编写爬取网站的 spider 并提取 Item 编写 Item Pipeline 来存储提取到的Item(即数据) 创建项目 在开始爬取之前,您必须创建一 ...
- 爬虫技巧:在pycharm 下 调试 scrapy项目
(1) 用pycharm导入scrapy项目 (2)选择自己编写的scrapy,run一下 (3)点击菜单栏的run ,选择Edit Configurations. (4)选择运行的spider文件 ...
- pycharm创建scrapy项目
没找到PyCharm怎么创建Scrapy项目 在xshell里面执行 [root@localhost web]# scrapy startproject carspider New Scrapy pr ...
- 创建第一个Scrapy项目
d: 进入D盘 scrapy startproject tutorial 建立一个新的Scrapy项目 工程的目录结构: tutorial/ scrapy.cfg # 部署配置文件 tutorial/ ...
- Scrapy:学习笔记(2)——Scrapy项目
Scrapy:学习笔记(2)--Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为"demo" scrapy startproject demo cd demo ...
- 创建Scrapy项目报错 UnicodeDecodeError: 'ascii' codec can't decode byte 0xa3 in position 19
刚安装好,创建Scrapy 项目报错: D:\py_workspace\test_scrapy>scrapy startobject a Traceback (most recent call ...
最新文章
- 知识图:从图和数据库中获取知识
- symfony2 Process 组件的学习笔记
- 2018-2019-2 网络对抗技术 20165239Exp3 免杀原理与实践
- 异常处理准则和最佳实践
- c# linq的差集,并集,交集,去重【转】
- 关于Ribbon的几个问题
- 小米跨界成立餐饮公司?其实就是新园区食堂...
- POJ 2686 Traveling by Stagecoach
- Android字体设置,Roboto字体使用
- 三年级计算机测试题,小学三年级信息技术考试试题
- 腾讯云cdn怎样接入域名
- (三)Web模块:【5】Servlet3.0 与 SpringMVC 整合
- 分类任务中的类别不平衡问题
- JavaScript实现爆炸碎片的 图片切换 效果
- 亿图脑图MindMaster思维导图及亿图图示会员-骨折啦
- PHP读取word文档的方法分析
- Data truncation: Incorrect string value
- 思创易控cetron-Cetron Wi-Fi 6 AP 荣获2020年度创新产品•鼎智奖
- 痞子衡嵌入式:PCM编码与Waveform音频文件(.wav)格式详解
- 赋能我国制造业由大向强,昂首阔步迈向高质量发展