思路
1、果壳网精彩问答界面url=https://www.guokr.com/ask/highlight/
2、自动获取多页url
3、自动获取每页问答界面url
4、使用css解析数据,获取访问界面问题标题、排位第一的答案文字和图片信息

一、准备工作

创建一个scrapy project:

 scrapy startproject GUOKE

创建crawspider file

scrapy genspider -t crawl guoke guoke.com

二、构建框架

(1) 声明items

import scrapyclass GuokeItem(scrapy.Item):question = scrapy.Field()answer = scrapy.Field()img = scrapy.Field()

(2) spider.py

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from GUOKE.items import GuokeItemclass GuokeSpider(CrawlSpider):name = 'guoke'allowed_domains = ['guokr.com']start_urls = ['https://www.guokr.com/ask/highlight/']rules = (# 指定规则, 获取所有页面的url,无需解析,当callback为None,follow默认为TrueRule(LinkExtractor(allow='page=\d+')),#获取每页对应的问答详情页url,解析数据,不需要进一步提取#检查时发现提取出一个无关url,使用deny去掉Rule(LinkExtractor(allow='question',deny=('new')),follow = False,callback='parse_item' ))#解析函数名不可设为parse,会与内置函数名重复而将其覆盖,影响抓取运行def parse_item(self, response):#print(response.url)item = GuokeItem()#使用CSS选择器获取问答详情页问题标题item['question'] = response.css('#articleTitle::text').extract_first().strip()#获取问答详情页排名第一的答案文字及图片item['answer'] ='\n'.join(response.css('.answer-txt p::text').extract())item['img'] = '\n'.join(response.css('.answer-txt img::attr(src)').extract())yield item

(3) middlewares.py
通过下载中间件设置User-Agent

import random
class Ugdownloadmiddleware(object):def __init__(self):#定义user-agent池self.user_agent_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3"]def process_request(self,request,spider):#随机选取User-Agentug = random.choice(self.user_agent_list)#给请求头传递ug参数request.headers['User-Agent'] = ugreturn Nonedef process_response(self,request,response,spider):#确定是否添加成功print('使用了ug:',request.headers['User-Agent'])return response

(4)pipelines.py
设置管道,连接数据库,保存数据

import pymongoclass GuokePipeline(object):def open_spider(self,spider):#连接数据库,host port 为默认值,不另外指定client = pymongo.MongoClient()#选择/创建数据库testmydb = client['test']#在数据库中 选择/创建表self.collection = mydb['guoke']def process_item(self, item, spider):#将item数据转为键值对格式data = dict(item)#插入数据self.collection.insert(data)return item

(5)setting.py
一般写好一部分代码就开启相应的设置版块,以防忘记

#设置日志文件,级别为只看warning
LOG_FILE = 'guoke.log'
LOG_LEVEL = 'WARNING'
#不遵守robot协议
ROBOTSTXT_OBEY = False
#下载延时,太快会被反爬
DOWNLOAD_DELAY = 3
#打开下载中间件,名称要与你设置的一致
DOWNLOADER_MIDDLEWARES = {'ITEM.middlewares.GuokePipeline: 543,
}
#打开管道
ITEM_PIPELINES = {'ITEM.pipelines.GuokePipeline': 300,
}

三、运行spider
(1)打开MongoDB服务器,启动客户端

    sudo mongod
    mongo

(2)运行spider

scrapy crawl guoke

四、进入数据库查看

ok啦

Crawlscrapy获取果壳问答信息相关推荐

  1. 【实战】scrapy 爬取果壳问答!

    引言 学爬虫的同学都知道,Scrapy是一个非常好用的框架,可以大大的简化我们编写代码的工作量.今天我们就从使用Scrapy爬取果壳问答. 需求分析 爬取果壳问答中精彩回答的标题和答案. 知识点 爬取 ...

  2. 查询Master下的系统表和系统视图获取数据库的信息和简单的渗透测试

    在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息.SQL2000和SQL2005的结构略有不同. 系统表结构参考系统表详细说明. ...

  3. uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...

    同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...

  4. iphone adb android,通过ADB获取Android手机信息

    1.获取手机体系信息(CPU,厂商名称等) adbshell"cat/system/build.prop|grep"product"" 2.获取手机体系版别 a ...

  5. 获取BT节点信息bittorrent-discovery

    2019独角兽企业重金招聘Python工程师标准>>> 获取BT节点信息bittorrent-discovery BT/磁力都是常见的P2P下载方式.用户作为一个节点node从其他用 ...

  6. python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]

    关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS ...

  7. 如何在系统崩溃时从C++中获取函数调用栈信息?

    这篇文章主要讲述在 Linux 和 Windows 这 2 个平台上,如何用C++ 来捕获函数调用栈里的信息. 一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些 ...

  8. MySQL SHOW TABLE STATUS 获取表的信息

    show table status 获取表的信息 show table status like 'tableName' 1.Name 表名称 2.Engine: 表的存储引擎 3.Version: 版 ...

  9. Java获取异常堆栈信息

    Java获取异常堆栈信息 参考文章: (1)Java获取异常堆栈信息 (2)https://www.cnblogs.com/zhi-leaf/p/6288769.html 备忘一下.

最新文章

  1. FastAdmin扩展PHPEXCEL,PHP7.3高版本兼容问题
  2. 如何处理win10系统内置Linux系统闪退问题
  3. c++仪表盘。。。附源码
  4. Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系
  5. java代码调用python_Java调用Python
  6. Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4C
  7. Lambda的Lambda(如果可选)
  8. 刚才看到一篇文章,感觉不错,转载过来和大家分享:
  9. hive设置为本地模式,从而避免MapReduce
  10. java文件字节流和文件字符流的使用
  11. 学校开展计算机培训活动,我校举办学生高级领导力专题培训活动
  12. tail关键字查询日志
  13. imitate wechat - 3
  14. Detection物体检测及分类方法总结(RFCN/SSD/RCNN/FastRCNN/FasterRCNN/SPPNet/DPM/OverFeat/YOLO)
  15. Dubbo系列之Provider Service注册和暴露(三)
  16. 飞桨EasyDL闪退解决方法
  17. 思岚科技定位导航技术凸显 成为服务机器人企业首选品牌
  18. win10 蓝牙忽然消失 华硕主板
  19. 麻省理工学院计算机好考吗,麻省理工大学世界排名是多少(麻省理工有多难考)...
  20. java从入门到精通二十四(三层架构完成增删改查)

热门文章

  1. 启动hdfs报错:hadoop100 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
  2. unity编辑器报错Microsoft Visual C# Compiler version
  3. 圣诞树-前端代码html--动态
  4. 洛谷1373小a和uim之大逃离
  5. 93、R语言教程详解
  6. mes系统故障_MES系统常见问题解析
  7. [Alpha] Scrum Meeting 7 - TEAM LESS ERROR
  8. Android QQ登陆界面实例
  9. 为什么好学生,学不好编程?
  10. 2017面向对象程序设计(Java)第十六周学习总结