在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况
Windows 10家庭中文版,Python 3.6.3,Scrapy 1.5.0,
时隔一月,再次玩Scrapy项目,希望这次可以玩的更进一步。
本文展示使用在 Scrapy项目内、项目外scrapy shell命令抓取知乎首页的初步情况,重要的一点是,在项目内抓取时,没有response可用。
在项目【外】执行抓取命令
scrapy shell https://www.zhihu.com
得到结果(部分):因为知乎的反爬虫功能,得到了400错误,访问失败。
INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0}
[]
2018-08-20 09:11:54 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-08-20 09:11:54 [scrapy.core.engine] INFO: Spider opened
2018-08-20 09:11:59 [scrapy.core.engine] DEBUG: Crawled (400) <GET https://www.zhihu.com> (referer: None)
可用对象如下图:存在response!

在项目【内】执行抓取命令
scrapy shell https://www.zhihu.com
注意,项目使用scrapy startproject命令创建,已经在其settings.py中添加了USER_AGENT配置项。
得到结果(部分):多了很多内容,还包括USER_AGENT设置。最后服务器返回200,表示页面访问成功。
INFO: Overridden settings: {'BOT_NAME': 'newssci', 'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0, 'NEWSPIDER_MODULE': 'newssci.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['newssci.spiders'], 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36-480'}
[]
2018-08-20 09:12:23 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-08-20 09:12:23 [scrapy.core.engine] INFO: Spider opened
2018-08-20 09:12:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.zhihu.com/robots.txt> (referer: None)
2018-08-20 09:12:24 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://www.zhihu.com>
可用对象如下图:没有response对象!还少了spider对象!

没有response对象,感觉什么也做不了了,网页也无法分析了。
总结
看来,还是需要到 项目外 使用scrapy shell命令来对网页做分析才是。不过,对于这种反爬虫的网站,在命令中添加上USER_AGENT配置项,然后就可以用response来做分析了。
项目外添加USER_AGENT配置项的命令如下:-s
scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36-480" https://www.zhihu.com
结果如下:发生了一次重定向,所以有302。
INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0, 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36-480'}
[scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://www.zhihu.com/signup?next=%2F> from <GET https://www.zhihu.com>
[scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.zhihu.com/signup?next=%2F> (referer: None)
发现了response对象可用:指明是针对其后的那个200网址的
[s] response <200 https://www.zhihu.com/signup?next=%2F>
使用response对象:获取页面title成功!
>>> response.xpath('//title/text()')
[<Selector xpath='//title/text()' data='知乎 - 发现更大的世界'>]
在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况的更多相关文章
- Shell 命令行统计 apache 网站日志访问IP以及IP归属地
Shell 命令行统计 apache 网站日志访问IP以及IP归属地 我的一个站点用 apache 服务跑着,积攒了很多的日志.我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里. 因为日 ...
- Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...
- android adb命令 抓取系统各种 log
getLog.bat: adb root adb remount adb wait-for-device adb logcat -v time > C:\log.txt 在Android中不同的 ...
- Shell脚本 | 抓取log文件
在安卓应用的测试过程中,遇到 Crash 或者 ANR 后,想必大家都会通过 adb logcat 命令来抓取日志定位问题.如果直接使用 logcat 命令的话,默认抓取出的 log 文件包含安卓运行 ...
- 重构后的程序:通过rsync命令抓取日志文件
push.sh #!/bin/bash function push() { local ip=$ local user=$ local password=$ local path=$ local lo ...
- 重构前的程序:通过rsync命令抓取日志文件
基本概况: 我有一台服务器每天每个小时都会生成一个日志文件,这些日志文件会被保留2天,超过2天会被一个程序压缩放到备份目录,日志文件的文件名是有命名要求的,例如:project_log.2013010 ...
- shell爬虫--抓取某在线文档所有页面
在线教程一般像流水线一样,页面有上一页下一页的按钮,因此,可以利用shell写一个爬虫读取下一页链接地址,配合wget将教程所有内容抓取. 以postgresql中文网为例.下面是实例代码 #!/bi ...
- shell脚本抓取网页信息
利用shell脚本分析网站数据 # define url time=$(date +%F) mtime=$(date +%T) file=/abc/shell/abc/abc_$time.log ht ...
- git 常用命令--抓取分支-为自己记录(二)
二:抓取分支: 多人协作时,大家都会往master分支上推送各自的修改.现在我们可以模拟另外一个同事,可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆, ...
随机推荐
- HDU 2020 绝对值排序
http://acm.hdu.edu.cn/showproblem.php?pid=2020 Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出. ...
- Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager
文章地址: Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager 1.使用ViewPager + PagerAdapter 每个页面的内容都 ...
- OneZero第四周第三次站立会议(2016.4.13)
1. 时间: 15:15--15:30 共计15分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...
- mybatis 注解和xml 优缺点
xml: 增加了xml文件,修改麻烦,条件不确定(ifelse判断),容易出错,特殊转义字符比如大于小于 注释: 复杂sql不好用,搜集sql不方便,管理不方便,修改需重新编译 #和$区别: 相同 都 ...
- 深入理解Java之线程池(爱奇艺面试)
爱奇艺的面试官问 (1) 线程池是如何关闭的 (2) 如何确定线程池的数量 一.线程池销毁,停止线程池 ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown() ...
- Java对中文进行排序
对中文进行排序,同样是得定义一个Comparator,下面上代码: import java.text.Collator; import java.util.ArrayList; import java ...
- 【题解】FBI序列
题目描述 两伙外星人策划在未来的XXXX年侵略地球,侵略前自然要交换信息咯,现在,作为全球保卫队队长,你截获了外星人用来交换信息的一段仅由“F”,“B”,“I”,“O”组成的序列.为了保卫地球和平,为 ...
- #35 string(缩点+动态规划)
容易发现有了交换相邻字符的操作后,只要字符串所含有的字符种类和数量相同其就是等价的.这样的状态只有n^3级别,将其抽象成点子串变换抽象成边后就是求最长路径了,缩点dp解决. 码量巨大,不是很明白要怎样 ...
- 初识Java Enum
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. enum是关键字,感觉它跟class.interface是并列的,并且不能跟fi ...
- 小记之while循环条件的操作位置
# 判断条件时自减操作 (循环体判断 len == 0) > 执行顺序为,while(len) → len-- → 循环体 while(len--) { == len) { *buf = i2c ...