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项目相关推荐

  1. pycharm创建scrapy项目教程及遇到的坑

    最近学习scrapy爬虫框架,在使用pycharm安装scrapy类库及创建scrapy项目时花费了好长的时间,遇到各种坑,根据网上的各种教程,花费了一晚上的时间,终于成功,其中也踩了一些坑,现在整理 ...

  2. 爬虫学习笔记(十三)—— scrapy-redis(二):存储到MySQL、Scrapy项目部署

    文章目录 一.小案例:爬取纵横小说(RedisCrawlSpider) 1.1.spider文件 1.2.settings文件 二.redis数据存储到MySQL 三.Scrapy 项目部署 3.1. ...

  3. 在pycharm创建scrapy项目

    在pycharm创建scrapy项目 步骤很简单,直接进入主题. 第一步: 创建一个python项目.解析器什么的自己选择,环境目录默认就好. 第二步: 下载scrapy,步骤file->set ...

  4. Scrapy入门(二)创建Scrapy项目

    创建一个Scrapy项目 定义提取的Item 编写爬取网站的 spider 并提取 Item 编写 Item Pipeline 来存储提取到的Item(即数据) 创建项目 在开始爬取之前,您必须创建一 ...

  5. 爬虫技巧:在pycharm 下 调试 scrapy项目

    (1) 用pycharm导入scrapy项目 (2)选择自己编写的scrapy,run一下 (3)点击菜单栏的run ,选择Edit Configurations. (4)选择运行的spider文件 ...

  6. pycharm创建scrapy项目

    没找到PyCharm怎么创建Scrapy项目 在xshell里面执行 [root@localhost web]# scrapy startproject carspider New Scrapy pr ...

  7. 创建第一个Scrapy项目

    d: 进入D盘 scrapy startproject tutorial 建立一个新的Scrapy项目 工程的目录结构: tutorial/ scrapy.cfg # 部署配置文件 tutorial/ ...

  8. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)--Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为"demo" scrapy startproject demo cd demo ...

  9. 创建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 ...

最新文章

  1. 知识图:从图和数据库中获取知识
  2. symfony2 Process 组件的学习笔记
  3. 2018-2019-2 网络对抗技术 20165239Exp3 免杀原理与实践
  4. 异常处理准则和最佳实践
  5. c# linq的差集,并集,交集,去重【转】
  6. 关于Ribbon的几个问题
  7. 小米跨界成立餐饮公司?其实就是新园区食堂...
  8. POJ 2686 Traveling by Stagecoach
  9. Android字体设置,Roboto字体使用
  10. 三年级计算机测试题,小学三年级信息技术考试试题
  11. 腾讯云cdn怎样接入域名
  12. (三)Web模块:【5】Servlet3.0 与 SpringMVC 整合
  13. 分类任务中的类别不平衡问题
  14. JavaScript实现爆炸碎片的 图片切换 效果
  15. 亿图脑图MindMaster思维导图及亿图图示会员-骨折啦
  16. PHP读取word文档的方法分析
  17. Data truncation: Incorrect string value
  18. 思创易控cetron-Cetron Wi-Fi 6 AP 荣获2020年度创新产品•鼎智奖
  19. 痞子衡嵌入式:PCM编码与Waveform音频文件(.wav)格式详解
  20. 赋能我国制造业由大向强,昂首阔步迈向高质量发展

热门文章

  1. 熬夜彻底搞懂Cookie Session Token JWT
  2. 全局负载均衡与CDN内容分发
  3. 一文搞懂select语句在MySQL中的执行流程!
  4. 牛逼!硬核图解 Tomcat 整体架构
  5. 没那么复杂,只需要一个故事就能理解NIO!
  6. 高并发下的秒杀系统架构设计实战!
  7. SQL 进阶技巧(上)
  8. zabbix监控快速搭建--云平台技术栈10
  9. 与其焦虑成疾,不如静心学习
  10. Oracle的括号转义字符,SQL中通配符、转义符与括号的使用