python scrapy爬取皇冠体育源码下载网站数据二(scrapy使用详细介绍)

1、scrapy工程创建皇冠体育源码下载论坛:haozbbs.com Q1446595067

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

scrapy startproject scrapyDemo

1

命令
创建好后的工程结构如下图
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

1
2
3
4

示例代码

上面的工程文件说明

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

1
2
3
4
5
6
7
8

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()

1
2

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 = 0
    for 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+1

def 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‘] = category
    item[‘title‘] = if len(newTitle)<=0 else newTitle[0]
    item[‘content‘] = ‘‘ if len(newContent)<=0 else newContent[0]
    yield item

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

3)保存内容

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

import os

class 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

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

1
2
3
4
5
6
7
8
9
10
11
12
13

3、总结

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

meta中放入共享参数即可

scrapy.Request(baseUrl+categoryLink,headers=headers,
meta={‘category‘: categoryNames[i],‘baseUrl‘:baseUrl},
callback=self.parseTwise)

原文地址:http://blog.51cto.com/13850549/2135718

时间: 2024-10-06 10:14:42

python scrapy爬取皇冠体育源码下载网站数据二(scrapy使用详细介绍)的相关文章

Hadoop皇冠体育源码搭建与数据倾斜及解决办法

1.增加jvm内存,这适用于第一种情况(唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)),这种情况下,皇-冠-体-育源码搭建QQ:2152876294 网址diguaym.com往往只能通过硬件的手段来进行调优,增加jvm内存可以显著的提高运行效率.2.增加reduce的个数,这适用于第二种情况(唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一),我们知道,这种情况下,最容易造成的结果就是大量相同key被partition到一个分区,从而一个

阅读源码需要注意什么问题,有什么好的源码下载网站

程序员除了养成看官方文档的阅读习惯外还需要有自己的学习全和交流平台,推荐几个源码下载网站,可以去上面学习下,做好的源码很适合新手更快的学习.阅读别人的代码.作为开发人员是一件经常要做的事情.一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验.本文上半部分主要是之前在网上看到的,拿到这里跟大家分享下. 收集所有可能收集的材料 阅读代码要做的第一件事情是收集所有和项目相关的资料.比如你要做一个项目的售后服务,那么你首先要搞明白项目做什么用的,那么调研文档.概要设计

Hadoop皇-----冠---体育源码搭建与数据倾斜及解决办法

1.增加jvm内存,这适用于第一种情况(唯一值非常少,极少数值有非常多的记录值(唯一值少于几千)),这种情况下,皇------冠--------体育源码搭建QQ:2152876294 网址diguaym.com往往只能通过硬件的手段来进行调优,增加jvm内存可以显著的提高运行效率.2.增加reduce的个数,这适用于第二种情况(唯一值比较多,这个字段的某些值有远远多于其他值的记录数,但是它的占比也小于百分之一或千分之一),我们知道,这种情况下,最容易造成的结果就是大量相同key被partitio

Android源码下载网站

javaapk安卓源码服务专家为您提供专业的安卓手机cocos2dx游戏源码下载.安卓项目源码下载.安卓商业应用源码下载.android app源码以及游戏源程序下载服务.所有android源码都经过严格的人工测试确保可用,源码每日更新.安卓快速开发从javaapk开始. 推荐给大家看看. 网址:http://www.javaapk.com/wp-login.php?action=register&refid=15745

利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

项目内容 本案例选择>> 商品类目:沙发: 数量:共100页  4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目目的 1. 对商品标题进行文本分析 词云可视化 2. 不同关键词word对应的sales的统计分析 3. 商品的价格分布情况分析 4. 商品的销量分布情况分析 5. 不同价格区间的商品的平均销量分布 6. 商品价格对销量的影响分析 7. 商品价格对销售额的影响分析 8. 不同省份或城市的商品数量分布 9.不同省份的商品平均销量分布 注:本项目仅以以上几项分析为

分享一个源码下载网站,天气预报项目源码,比较适合新手学习

本项目是一个天气预报项目源码,可以设置城市.可以更换应用内背景图片.自带天气widget小组件等,天气信息由m.weather.com.cn提供.比较适合新手学习和参考.项目编译版本4.2.2默认编码UTF-8源码有大量中文注释. 上链接:http://www.devstore.cn/code/info/104.html,需要的拿去. 天气预报项目相关服务--推送服务的选择,市场上的推送服务有百度云,个推,极光,友盟,小米,Bmob,智游等等,在如此多的推送服务里面你的项目该集合哪个推送服务呢,

C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载

下载地址 ** dome **

分享一个源码下载网站,高仿京东商城源码下载

仿照京东商城做出的APP(仅实现了部分界面),自己开发着玩的,需要的拿去 京东商城,小试牛刀之作,与广大开发者分享,需要的拿去 http://www.devstore.cn/code/info/87.html 登陆界面 新品特惠疯狂抢购页面 京东商城项目相关服务--支付平台的选择,市场上的支付平台有支付宝,银联,机锋支付,360开放平台,有米,豌豆荚,中国移动应用,微信,微派,百度钱包等等,在如此多的支付平台里面你的项目该集合哪几个支付平台呢,推荐你关注参考相关资料DevStore这个平台,有关

Python爬虫学习之获取网页源码

偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义就不多说了,不知道的请自行点击查看 =>百度百科 网络爬虫,维基百科 网络爬虫 有很多编程语言都可以编写网络爬虫,只不过各有各的优缺点,这里我选择用Python语言编写爬虫,因为Python是一门非常适合用来编写爬虫的语言,用它实现爬虫的代码量相对其他语言要少很多,并且python语言对网络编程这类模块