Python爬虫入门——3.9 Scrapy爬虫实战_scrapy python 3.9-程序员宅基地

技术标签: Python爬虫入门  Python爬虫  Python算法入门  

声明:搬运自“ 从零开始学Python网络爬虫  ”作者:罗攀,蒋仟机械工业出版社ISBN:9787111579991

上一节我们讲了Scrapy框架的安装以及基本信息,这一节我们就开始使用Scrapy框架进行知乎数据的爬取。

首先利用命令管理器创建一个知乎的项目项目。具体做法是在打开的命令管理器输入  

  • ˚F:(我要创建项目的盘)
  • cd F:\ soft_exercise \ python(我要创建项目的目录)
  • scrapy startproject zhihu(利用scrapy startproject命令创建名为zhihu的项目)

结果如下:

创建完成后,使用pycharm打开可以看到如下文件:其中zhihuspiders是我创建的文件

 

 

 现在开始项目的分析与实现

1,我们要分析一下我们的目的,以及技术路线。我们的目的是爬取知乎蟒话题的相关信息。然后将其存储在MongoDB的数据库中。

2,我们需要爬去的信息有:蟒问题,点赞数,回答用户数,用户信息和回答内容

3,代码编写

3.1,items.py文件的编写

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class ZhihuItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    question = scrapy.Field()
    favour = scrapy.Field()
    user = scrapy.Field()
    user_info = scrapy.Field()
    content = scrapy.Field()
    pass

3.2,zhihuspiders.py文件的编写

#导入相应的库文件
from scrapy.spiders import CrawlSpider
from scrapy.selector import Selector
from scrapy.http import Request
from zhihu.items import ZhihuItem

class zhihu(CrawlSpider):
    #爬虫的唯一名称
    name = 'zhihu'
    start_url = ['https://www.zhihu.com/topic/19552832/top-answers?page=1']
    def parse(self, response):
        item = ZhihuItem()
        selector = Selector(response)
        infos = selector.xpath('//div[@class="zu-top-feed-list"]/div')
        for info in infos:
            try:
                question = info.xpath('div/div/h2/a/text()').exextract()[0].strip()
                favour = info.xpath('div/div/div[1]div[1]/a/text()').extract()[0]
                user = info.xpath('div/div/div[1]/div[3]/span/span[1]/a/text()').extract()[0]
                user_info = info.xpath('div/div/div[1]/div[3]/span/span[2]/text()').extract()[0].strip()
                content = info.xpath('div/div/div[1]/div[5]/div/text()').extract()[0].strip()
                item['question'] = question
                item['favour'] = favour
                item['user'] = user
                item['user_info'] = user_info
                item['content'] = content
                yield item
            except IndexError:
                pass

3.3,pipelines.py文件的编写

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html


class ZhihuPipeline(object):
    def __init__(self):
        #连接数据库
        client = pymongo.MongoClient('localhost', 27017)
        test = client['test']
        tieba = test['zhihu']
        self.post = zhihu

    #插入数据库
    def process_item(self, item, spider):
        info = dict(item)
        self.post.insert(info)
        return item

3.4,settings.py文件的编写

ROBOTSTXT_OBEY = True
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
DOWNLOAD_DELAY=2
ITEM_PIPELINES = {'zhihu.pipelines.ZhihuPipeline':300}  #指定处理文件

3.5,main.py文件的编写,主要文件是新建的文件

from scrapy import cmdline
cmdline.execute("scrapy crawl zhihu".split())

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lpp5406813053/article/details/84585846

智能推荐

latex中表格怎么加标题_导出到LaTeX时,使组织表格标题显示在表格下方 | 所有编程讨论 | zhouni.net...-程序员宅基地

文章浏览阅读972次。我正在制作一份文件 org-mode其中有相当多的表,使用内置的表功能构建。我已经为表格添加了标题,但是当我将它们导出到 LaTeX,而不是出现在表格下方的标题,它出现在它上面。在手册中 关于表格的部分和 乳胶出口文件,没有提到任何改变这个的方法,除了摆弄 LaTeX代码手动。作为示例,以下代码片段显示了带有标题的示例表上的导出生成的内容。#+CAPTION: Results using t..._latex 表格加不上标题

2021.12.18--python--if语句 while语句_if函数改成while函数-程序员宅基地

文章浏览阅读718次。2021.12.18--python--if语句 while语句_if函数改成while函数

Linux小萌新学习笔记(三)_centox7 flashplayer-程序员宅基地

文章浏览阅读119次。1.到https://dev.mysql.com/downloads/file/?id=501382下载linux版centox7,mysql8.0版本2.通过远程上传工具将下载好的压缩包上传至linux3.4. tar -xvf mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar5.rpm -ivh mysql-community-common-8.0.23-1.el7.x86_64.rpm --nodeps --forcerpm -ivh mysql-com_centox7 flashplayer

openwrt作旁路由配置教程_openwrt旁路由防火墙设置-程序员宅基地

文章浏览阅读1.7w次,点赞2次,收藏39次。openwrt作旁路由配置教程_openwrt旁路由防火墙设置

关于vue中的组件渲染函数render中的scopedSlots属性和this.$scopedSlots和this.$slots的疑惑记录-程序员宅基地

文章浏览阅读1.3w次,点赞14次,收藏25次。最近研究了vue的官方文档,到组件自定义渲染函数时,对第二个属性对象参数中的scopedSlots不太明白作用是什么,官网的案例也是一笔带过,于是连查带试算是明白了他的作用,这里记录一下,希望能帮到遇到相同问题的童鞋.先说一下函数中的$slots吧,这个用起来很简单,直接获取到组件中对应的插槽虚拟节点.this.$slots.插槽名称.废话少说,直接上代码:<div id="a..._this.$scopedslots

如何运用DDD(三):领域服务-程序员宅基地

文章浏览阅读884次。本文将介绍领域驱动设计(DDD)战术模式中另一个非常重要的概念——领域服务。在前面两篇博文中,我们已经学习到了什么是值对象和实体,并且能够比较清晰的定位它们自身的行为。但是在某些时候,你..._领域服务需要用到的服务,放在什么位置

随便推点

探索Sharpnado.Presentation.Forms:一个强大的 Xamarin.Forms UI 工具库-程序员宅基地

文章浏览阅读388次,点赞3次,收藏10次。探索Sharpnado.Presentation.Forms:一个强大的 Xamarin.Forms UI 工具库项目地址:https://gitcode.com/roubachof/Sharpnado.Presentation.FormsSharpnado.Presentation.Forms 是一款开源的 Xamarin.Forms 库,为移动应用开发提供了一系列高级 UI 控件和实用功能...

word表格三线表线宽度_出版物 三线表 宽度-程序员宅基地

文章浏览阅读3.6k次。别人的帮助下,解决了三线表中线需要宽度(粗细)不一致的问题。及时记录。word 页面布局---》页面边框-----》边框选择合适的粗细后 ,点击,再点击,右边框里的线,以肉眼看见线粗细变化了,然后确定,这才能成功修改。..._出版物 三线表 宽度

通过filebeat、logstash、rsyslog采集nginx日志的几种方式_filebeat8.12 传nginx 日志-程序员宅基地

文章浏览阅读626次。由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志。大家都知道ELK技术栈是采集、分析日志的利器。所以这里介绍的是从nginx采集日志到ES。当然至于日志采集以后存到看大家的需要。通过logs_filebeat8.12 传nginx 日志

使用GP裁剪工具裁剪栅格不能“按照矢量图范围”裁剪的一个问题_gis栅格剪切提示剪切要素超出栅格范围-程序员宅基地

文章浏览阅读1.4k次。调用GP工具裁剪栅格数据的代码:ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(); gp.OverwriteOutput = true; ESRI.ArcGIS.DataManagementTools..._gis栅格剪切提示剪切要素超出栅格范围

win7运行caffe自带的mnist_win7caffe运行库-程序员宅基地

文章浏览阅读245次。一.运行环境win7 caffe(caffe-master)caffe环境已配好二.运行步骤1.下载数据文件http://yann.lecun.com/exdb/mnist/,将文件解压到caffe-master\data\mnist下2.在caffe-master\data\mnist下新建create_mnist.bat文件,内容如下:..\..\Build\x6..._win7caffe运行库

.NET WinForm 文本控件加入水印文字_c#winform给图片添加水印-程序员宅基地

文章浏览阅读2.7k次。今天突然来了一个这样的需求,需要在C#的编辑框上加入一个Hint水印效果,类似如下图:以前在手机上(wp)上做过类似的效果。参考silverlight toolkit 的searchTextBox。现在要在winform下制作,开始我还以为应该有啥啥属性可以一键搞定,结果目测了一下,没有什么属性,于是乎百度了一下,网上说用win32API来做,这倒挺神奇的,参考别人做了如下列子。申明一_c#winform给图片添加水印

推荐文章

热门文章

相关标签