python scrapy爬取网站数据二(scrapy使用详细介绍)

news/2024/5/15 21:36:34/文章来源:https://blog.csdn.net/fengshuiyue/article/details/80858221

上篇文章 python scrapy爬取网站数据一 从一个简单的例子中给大家呈现了scrapy的使用,本篇将对scrapy的常用写法 做一个简单的介绍。

1、scrapy工程创建

在命令行输入如下命令,创建一个使用scrapy框架的工程

scrapy startproject scrapyDemo

命令
创建好后的工程结构如下图
scrapy工程结构

输入如下命令,在工程目录中创建示例代码

PS C:\ProjectPycharm> cd scrapyDemo
PS C:\ProjectPycharm\scrapyDemo> scrapy genspider example example.com
Created spider 'example' using template 'basic' in module:scrapyDemo.spiders.example

示例代码

上面的工程文件说明

  • scrapyDemo/spiders/ 爬虫目录,如:创建文件,编写爬虫规则
  • scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)(一般不需要做修改)
  • items.py 设置数据存储模板,用于结构化数据,如:Django的Model,定义的结构可在piplines中、example.py中使用
  • pipelines.py 数据处理行为,如:一般结构化的数据持久化(保存到excel、保存到数据库、下载图片到本地等)
  • settings.py 配置文件,如:递归的层数、并发数,延迟下载等

2、scrapy简单爬虫代码

本示例代码以爬取今日头条的新闻,抓取标题和内容并保存为本地文件。

1)定义爬取的条目(item)

该条目的信息 在items.py中定义,在example.py中填充,通过pipelines.py保存到excel

# items.py
import scrapy
class ScrapydemoItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()  # 新闻标题content = scrapy.Field() # 新闻内容pass

2)爬取信息

在example.py中编写爬取信息代码,首先访问FT中文网-中国咨询,然后遍历新闻分类banner,然后访问该分类,在获取该分类下的新闻列表,然后访问每条新闻的详细信息页,保存新闻标题和内容到item中

① xpath分析

财经的xpath截取为:

categoryLinks = response.xpath('//li[@data-section="china"]/ol[@class="nav-items"]/li[@class="nav-item"]/a/@href').extract()
categoryNames = response.xpath('//li[@data-section="china"]/ol[@class="nav-items"]/li[@class="nav-item"]/a/text()').extract()

xpath分析

② 爬取代码

在发起请求函数scrapy.Request中可以传入自定义值到meta这个变量中,可以在自定义分析函数中获取到请求中的自定义参数

# -*- coding: utf-8 -*-
import scrapy
from scrapyDemo.items import ScrapydemoItem
headers = {'accept':'application/json, text/javascript','accept-encoding':'gzip, deflate, br','accept-language':'zh-CN,zh;q=0.9','content-type':'application/x-www-form-urlencoded','user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','x-requested-with':'XMLHttpRequest'
}class ExampleSpider(scrapy.Spider):name = 'ExampleSpider'allowed_domains = ['www.ftchinese.com']start_urls = []def start_requests(self):yield scrapy.Request('http://www.ftchinese.com/channel/china.html',headers=headers,meta={'baseUrl': 'http://www.ftchinese.com/'}, callback=self.parse)def parse(self, response):baseUrl = response.meta['baseUrl']categoryLinks = response.xpath('//li[@data-section="china"]/ol[@class="nav-items"]/li[@class="nav-item"]/a/@href').extract()categoryNames = response.xpath('//li[@data-section="china"]/ol[@class="nav-items"]/li[@class="nav-item"]/a/text()').extract()i = 0for categoryLink in categoryLinks:#  meta={'category': categoryNames[i]} 用于scrapy爬取信息分散在多个页面,#  用于向后面的parse传递前面parse分析得到的内容yield scrapy.Request(baseUrl+categoryLink,headers=headers,meta={'category': categoryNames[i],'baseUrl':baseUrl},callback=self.parseTwise)i = i+1def parseTwise(self,response):baseUrl = response.meta['baseUrl']newLinks = response.xpath('//a[@class="item-headline-link"]/@href').extract()for newLink in newLinks:yield scrapy.Request(baseUrl+newLink,headers=headers, meta=response.meta,callback=self.parseThird)def parseThird(self,response):category = response.meta['category']newTitle = response.xpath('//h1[@class="story-headline"]/text()').extract()newContent = response.xpath('//h1[@class="story-body"]/text()').extract()item = ScrapydemoItem()item['category'] = categoryitem['title'] = if len(newTitle)<=0 else newTitle[0]item['content'] = '' if len(newContent)<=0 else newContent[0]yield item

3)保存内容

在pipelines.py中编写保存文件代码

import osclass ScrapydemoPipeline(object):def process_item(self, item, spider):basePath = "c:\\ft_news\\"fileFolder = basePath + "\\" + item['category']filePath = fileFolder+"\\"+item['title']+".txt"if not os.path.exists(fileFolder):  # 判断当前路径是否存在,没有则创建new文件夹os.makedirs(fileFolder)file = open(filePath, 'w')file.write(item['content'])  # 写入内容信息file.close()print(filePath)return item

4)工程启用功能配置

想让 ScrapydemoPipeline起作用,我们还需要在settings.py中添加开启pipline(开启通道)代码。

# settings.py文件代码
BOT_NAME = 'scrapyDemo'SPIDER_MODULES = ['scrapyDemo.spiders']
NEWSPIDER_MODULE = 'scrapyDemo.spiders'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# 开启pipline
ITEM_PIPELINES = {'scrapyDemo.pipelines.ScrapydemoPipeline':300
}
# 设置爬取速度,一般为0.25~0.3(即250ms~300ms)间,设置的时间太短,网关防火墙会截获连接认为是恶意访问
DOWNLOAD_DELAY = 0.3

3、总结

本篇博客记录了scrapy常用的功能,同时还在示例代码中展示了 多级访问共享参数的方式,即

# meta中放入共享参数即可
scrapy.Request(baseUrl+categoryLink,headers=headers,meta={'category': categoryNames[i],'baseUrl':baseUrl},callback=self.parseTwise)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_773154.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据url 在ensembl 网站爬取外显子等数据

根据url 在ensembl 网站爬取外显子等数据 需要先一步准备好url&#xff0c;我准备的url如下&#xff1a; 主要是g 和 t 两列内容不同 可以准备好g和t两列数据&#xff0c;用python自动补充好url链接&#xff0c;代码如下&#xff1a; &#xff08;注意&#xff1a;url不要是列…

echarts图形示例网站(含代码),提升开发效率

echarts网站 公司的大屏需要echarts开发&#xff0c;但是不熟悉文档开发很慢怎么办呢&#xff0c;推荐几个厉害网址&#xff0c;需要开发什么图形直接去复制出来改改就完事儿啦&#xff01; https://www.isqqw.com/#/homepage http://ppchart.com/#/ http://analysis.data…

让iis php 错误_IIS PHP环境Temp文件夹的权限问题引起的网站故障

前几天不知为何&#xff0c;服务器抽风严重…服务器非常慢&#xff0c;把WINDOWS2003重启了&#xff0c;结果连不上服务器。结果悲剧的去了机房。查找不出什么问题&#xff0c;GHOST恢复系统。几天后回去又装了个新站上去。再过两天后&#xff0c;问题又出现了。排查过程 检查网…

php监听器session,Servlet HttpSessionListener监听器统计网站在线人数

在许多网站或者软件应用中都有统计当前在线人数这一功能。在通常情况下&#xff0c;当一个用户进入网站时就会创建一个 HttpSession 对象&#xff0c;而当用户离开网站时&#xff0c;HttpSession 对象就会被销毁。在 Servlet 的八种监听器中&#xff0c;HttpSessionListener 监…

网站部署到linux 在进行压测,在Linux CentOS上搭建Jmeter压测环境

本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程&#xff0c;来满足我们日常工作中对于压力测试环境搭建、压力测试执行过程的需求。一、首先我们要准备四个东西&#xff0c;在搭建环境的时候需要使用到1、Xshell、puTTy等终端连接工具(…

哪种营销方法效果最差_百度推广网站怎么做营销?4个方法营销效果好

百度平台发展到现在已拥有超过亿万用户&#xff0c;所以每个企业都想在百度平台上搭建网站&#xff0c;当然不管搭建什么类型的网站都有99.9%的企业是希望有人来看&#xff0c;而且是越多越好&#xff0c;这样可能会在短时间实现曝光和流量转化的。那么&#xff0c;有两个问题&…

PHP占网站开发比例,最新报告78.7%网站的服务器端编程语言使用PHP,Python仅占1.4%...

根据w3techs官方显示&#xff0c;78.7&#xff05;网站的服务器端编程语言使用PHP&#xff0c;其次是ASP.NET占比10.5%&#xff0c;第三是Java占比3.5%&#xff0c;Python则排名在第七占比1.4%。网站的服务器端编程语言使用占比相比前两年网站的服务器端编程语言PHP占比有所下降…

windos php7 fast cgi,FAST-CGI解析漏洞拿下网站并提权windows系统服务器

作为一个懒散的人&#xff0c;我比较喜欢关注网上发布的漏洞。利用最新的漏洞可以比较简单的得到webshell&#xff0c;然后利用webshell提权拿下服务器&#xff0c;这个是我最喜欢的。有一个很有意思的娱乐网站&#xff0c;我经常登陆浏览&#xff0c;以前就有拿下这个网站的想…

网站24小时监控服务器,24小时监控服务器

24小时监控服务器 内容精选换一换24小时监控服务器 相关内容本章节指导用户查看主机监控指标&#xff0c;监控指标分为Agent插件采集的细颗粒度的操作系统级别监控指标和ECS自带的监控指标。操作系统监控指标和基础监控指标请参见支持监控的服务列表。已完成Agent插件的安装。安…

服务器怎么修改主题,wordpress网站更换主题改版网站

在建立好了一个网站&#xff0c;并运营了较长时间之后&#xff0c;网站的内容已经非常丰富了&#xff0c;但随着网站运营时间的进行&#xff0c;以及访问用户的积累&#xff0c;很多时候之前的网站版面、以及一些用户体验都是需要进行改进的&#xff0c;因此当到达一个时间节点…

好用的图标网站

https://www.iconfont.cn/collections/index?spma313x.7781069.1998910419.da2e3581b&type1

pycharm新建Django项目与Django网站的新建

用manage.py 快速创建网站所有环境:(对django来讲所有的网站都是app) python manage.py startapp django_web#django_web是你的网站名DjangoMTV模型:

好用的数据结构网站

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

python 制作网页 选择题_Python爬取天眼查网站的方法大全

以下链接都来自知乎问答python如何通过请求json文件&#xff0c;实现高效爬取动态加载页面&#xff1f; 完整模拟http请求即可&#xff0c;推荐requests库&#xff0c;写程序自动生成requests就行了。我现在的分布式爬虫系统就是这个策略&#xff0c;各大OTA都抓过了&#xff0…

python画太极八卦图_「太极八卦图」使用HTML+CSS画太极八卦图 - seo实验室

太极八卦图使用HTMLCSS画太极八卦图基本语法CSS基本语法格式:选择符{属性1:属性值1;属性2:属性值2;属性3:属性值3;......}选择符:1.元素选择器:找到同名一系列2.类选择器:找到同类名一系列定义:web前端开发1调用:.p1{属性1:属性值1;属性2:属性值2;属性3:属性值3;......}3.id选择…

zblog php建站教程_Z-BlogPHP主题制作教程

很早就想写这个教程了&#xff0c;不过由于时间的问题&#xff0c;被一值耽搁了。其实我在刚接触zblog的时候&#xff0c;在网上搜索过主题的制作教程&#xff0c;结果很不理想&#xff0c;没找到一个详细的教程&#xff1b;自己也是一边摸索一边做&#xff0c;后来虽然做出了一…

php 生成html工具seo6,AtoZ SEO Tools v2.6 – PHP搜索引擎优化工具

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;该源码已亲自测试可以安装使用源码简介隐藏内容&#xff0c;您需要满足以下条件方可查看End在线演示隐藏内容&#xff0c;您需要满足以下条件方可查看End功能简介隐藏内容&#xff0c;您需要满足以下条件方可查看E…

代码命名网站

https://unbug.github.io/codelf/

堆积密度怎么做_[SEO优化]关键词究竟应该怎么优化?

一、关键词分布seo关键词优化中&#xff0c;关于挖掘关键词这一块&#xff0c;在这里就不讲了。先讲一下关键词在各个页面如何布局的。网站首页一般选3到5个关键词&#xff0c;其它每个栏目页面选2到3个关键词。原则上讲&#xff0c;网站首页一般放难度稍高一点的关键词&#x…

java 电子杂志_java毕业设计_springboot框架的时尚电子杂志网站设计

这是一个基于java的毕业设计项目,毕设课题为springboot框架的时尚电子杂志网站设计, 是一个采用b/s结构的javaweb项目, 开发工具eclipsei/eclipse, 项目框架jspspringbootmybatis, 时尚电子杂志网站设计采用mysql进行数据存储, 并基于mybatis进行了orm实体关系映射, 该时尚电子…