1、安装scrapy

  pip3 install scrapy

2、打开terminal,cd 到想要创建程序的目录下

3、创建一个scrapy项目

  在终端输入:scrapy startproject my_first_scrapy(项目名)

4、在终端输入:cd my_first_scrapy  进入到项目目录下

5、新建爬虫:

  输入: scrapy genspider chouti chouti.com  (chouti: 爬虫名称, chouti.com : 要爬取的网站的起始网址)

6、在pycharm中打开my_first_scrapy,就可以看到刚才创建的项目:

7、打开settings.py可以对项目相关参数进行设置,如设置userAgent:

8、打开chouti.py编写代码:

# -*- coding: utf-8 -*-
"""
获取抽屉新热榜的标题和内容以及新闻地址保存到本地
"""
import scrapy
from scrapy.http import Request
from scrapy.http.response.html import HtmlResponse
from ..items import MyFirstScrapyItem class ChoutiSpider(scrapy.Spider):
name = 'chouti'
allowed_domains = ['chouti.com']
start_urls = ['http://chouti.com/'] def parse(self, response):
# print(response, type(response)) # <class 'scrapy.http.response.html.HtmlResponse'>
# print(response.text) # 解析文本内容, 提取标题和简介,地址 # 去页面中找id=content-list的div标签,再去这个div下找class=item的div
items = response.xpath("//div[@id='content-list']/div[@class='item']")
# "//"表示从html文件的根部开始找。"/"表示从儿子里面找。".//"表示相对的,及当前目录下的儿子里面找
for item in items:
# 当前目录下找class=part1的div标签,再找div标签下的a标签的文本信息text(),并且只取第一个
# a标签后面可以加索引,表示取第几个a标签,如第一个:a[0]
title = item.xpath(".//div[@class='part1']/a/text()").extract_first().strip() # 去掉标题两端的空格
href = item.xpath(".//div[@class='part1']/a/@href").extract_first().strip() # 取href属性
summary = item.xpath(".//div[@class='area-summary']/span/text()").extract_first()
# print(1, title)
# print(2, href)
# print(3, summary)
item_obj = MyFirstScrapyItem(title=title, href=href, summary=summary) # 实例化
yield item_obj # 将数据交给pipelines # 获取页码
page_list = response.xpath("//div[@id='dig_lcpage']//a/@href").extract()
for url in page_list:
url = "https://dig.chouti.com%s" % url
yield Request(url=url, callback=self.parse) # 下载页面内容

9、打开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 MyFirstScrapyItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 规则化:将要持久化的数据转化为某种格式
title = scrapy.Field()
href = scrapy.Field()
summary = scrapy.Field()

10、打开pipelines.py写代码:

"""
1、先去类中找from_crawler
有:执行且必须返回一个当前类的对象
没有:不执行,则去执行构造方法__init__(self)并返回一个对象
2、再去执行"对象.其他方法"
""" class MyFirstScrapyPipeline(object):
def __init__(self, file_path):
self.f = None
self.file_path = file_path @classmethod
def from_crawler(cls, crawler):
"""
初始化时,用于创建pipelines对象
:param crawler:
:return:
"""
file_path = crawler.settings.get("CHOUTI_NEWS_PATH") # 存储文件的路径
return cls(file_path) def open_spider(self, spider):
"""
打开文件
:param spider:提交数据过来的爬虫对象
:return:
"""
self.f = open(self.file_path, "a+", encoding="utf-8") def process_item(self, item, spider):
"""
:param item: 爬虫中yield过来的item对象
:param spider:提交数据过来的爬虫对象
:return:
"""
self.f.write(item["href"] + "\n")
self.f.flush() # 将内容强刷到硬盘进行保存
return item def close_spider(self, spider):
"""
关闭文件
:param spider:提交数据过来的爬虫对象
:return:
"""
self.f.close()

11、在settings.py中找到 ITEM_PIPELINES进行设置,并设置存储下载的新闻存储的文件路径:

12、运行爬虫项目,在终端输入:

  scrapy crawl chouti(会打印日志)  或者 scrapy crawl chouti --nolog (不打印日志)

  

利用scrapy获取抽屉新热榜的标题和内容以及新闻地址保存到本地的更多相关文章

  1. 【IOS】模仿"抽屉新热榜"动态启动页YFSplashScreen

    IOS最好要设置系统默认启动页面,不然进入应用就会突然闪现黑色画面 下图是我们要实现的效果: 总体思路:设置一个系统默认启动页面,在进入didFinishLaunchingWithOptions时, ...

  2. Python之路【第二十篇】:python项目之旧版抽屉新热榜

    旧版抽屉新热榜 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  3. 【Python之路】特别篇--抽屉新热榜

    登陆与注册 注册功能: 流程: 填写用户名,邮箱,获取邮箱验证码,填入密码 单击<下一步>按钮,完成注册! 1.获取邮箱验证码(具体步骤分析): 1.利用ajax 往后台传入邮箱, 2.后 ...

  4. 利用scrapy爬取腾讯的招聘信息

    利用scrapy框架抓取腾讯的招聘信息,爬取地址为:https://hr.tencent.com/position.php 抓取字段包括:招聘岗位,人数,工作地点,发布时间,及具体的工作要求和工作任务 ...

  5. 用python实现的百度新歌榜、热歌榜下载器

    首先声明,本工具仅仅为学习之用,不涉及版权问题,因为百度音乐里面的歌曲本身是可以下载的,而且现在百度也提供了”百度音乐播放器”,可以通过这个工具进行批量下载. 我当时做这个工具的时候,百度还没有提供” ...

  6. 了不起的 Deno:带你极速获取各大平台今日热榜

    摘要:Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验. 有人的地方就有江湖,有江湖的地方就有争论.前些天,继<[译]为什么如 ...

  7. (转)利用libcurl获取新浪股票接口, ubuntu和openwrt实验成功(三)

    1.  利用 CURLOPT_WRITEFUNCTION 设置回调函数, 利用 CURLOPT_WRITEDATA 获取数据指针 官网文档如下 CALLBACK OPTIONS CURLOPT_WRI ...

  8. 全网趣味网站分享:今日热榜/Pixiv高级搜索/win10激活工具/songtaste复活/sharesome汤不热替代者

    1.回形针手册 由科普类视频节目“回形针PaperClip”近期提出的一个实用百科工具计划,计划名称是回形针手册. 包含了当下科技,农业等等各行各业的各种相关信息,计划刚刚开始! 关于回形针手册的详细 ...

  9. 利用scrapy和MongoDB来开发一个爬虫

    今天我们利用scrapy框架来抓取Stack Overflow里面最新的问题(),并且将这些问题保存到MongoDb当中,直接提供给客户进行查询. 安装 在进行今天的任务之前我们需要安装二个框架,分别 ...

随机推荐

  1. IE css hack整理

    CSS hack由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozillafirefox等,对CSS的解析认识不一样,因此会导致生成的页面效果 ...

  2. UvalLive4670(AC自动机模板)

    放上刘汝佳的模板: #include <cstdio> #include <cstring> #include <string> #include <algo ...

  3. JavaScript-获取当前元素的相关元素或节点--方法总结

    1.获取当前元素中的第一个子节点 document.getElementById("uu").firstChild 2.获取当前元素中的第一个子元素 document.getEle ...

  4. pwa-serviceWorker与页面通信postMessage

    https://ppt.geekbang.org/list/gmtc2018?from=groupmessage&amp%3Bisappinstalled=0 http://www.sohu. ...

  5. 使用 Realm 和 Swift 创建 ToDo 应用

    原文出处: HOSSAM GHAREEB   译文出处:Prayer’s blog(@EclipsePrayer) 智能手机的快速发展的同时,涌现出了很多对开发者友好的开发工具,这些工具不仅使得开发变 ...

  6. Aappcloud 调到二级页面黑屏

    PartnerHead3.html 后面多了一个点

  7. html引入另一个html

    在写页面的时候,有些东西是一样的,比如头部的导航或者尾部的标注.所以复用的东西可以写到一个文件中,之后再引入,angularjs或是jsp中都有很好的标签引入,而html没有,但是可以借助一些方式进行 ...

  8. C#中this指针的用法示例

    这篇文章主要介绍了C#中this指针的用法,对初学者而言是非常重要的概念,必须加以熟练掌握,需要的朋友可以参考下. 本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体 ...

  9. checkbox:全选、全不选、单选(慕课网题目)

    任务 1.在第27行处补充完整,实现当点击"全选"按钮时,将选中所有的复选项. 提示:document.getElementsByTagName("input" ...

  10. iOS 二维码的生成 QREncoder

    生成二维码: 在生成二维码的库中QREncoder最为常见,但是由于中文字符的特殊性,生成中文的时候有时会出现一定的错误,所以建议使用libqrencode,是一个纯C编写的类库. 以libqrenc ...