Python3[爬虫实战] scrapy爬取汽车之家全站链接存json文件

昨晚晚上一不小心学习了崔庆才,崔大神的博客,试着尝试一下爬取一个网站的全部内容,福利吧网站现在已经找不到了,然后一不小心逛到了汽车之家 (http://www.autohome.com.cn/beijing/)

很喜欢这个网站,女人都喜欢车,更何况男人呢。(捂脸)


说一下思路:
1 . 使用CrawlSpider 这个spider,
2. 使用Rule
上面这两个配合使用可以起到爬取全站的作用

3. 使用LinkExtractor  配合Rule可以进行url规则的匹配
4. FormRequest  这是scrapy 登陆使用的一个包

注意:这里进行全站的爬取只是单纯的把以 .html 的url进行打印,保存到json文件,

这里我们还可以继续往下深入的,进行url下的内容提取。

说一下提取的思路:这里我们可以随便找一个url下的内容,然后找到想要提取到的内容,进行xpath提取,

xpath 的一般提取规则:选中想要提取内容的那一行,然后右键copy --> copy xpath  就可以啦,这里老司机说是最好用chrom浏览器的xpath,火狐可能有时候提取不到想要的元素,


xpath提取的简单并且常用的规则:

//*[@id=”post_content”]/p[1]

意思是:在根节点下面的有一个id为post_content的标签里面的第一个p标签(p[1])

如果你需要提取的是这个标签的文本你需要在后面加点东西变成下面这样:

//*[@id=”post_content”]/p[1]/text()

后面加上text()标签就是提取文本

如果要提取标签里面的属性就把text()换成@属性比如:

//*[@id=”post_content”]/p[1]/@src

So Easy!XPath提取完毕!来看看怎么用的!那就更简单了!!!!

response.xpath(‘你Copy的XPath’).extract()[‘要取第几个值’]

注意XPath提取出来的默认是List。

上面就是简单的提取规则,是不是很容易懂,我觉着也是,比之前学的容易懂多了,可能我现在还是个小白吧。哈哈哈。

附录一下:

关于imgurl那个XPath:

你先随便找一找图片的地址Copy XPath类似得到这样的:

//*[@id=”post_content”]/p[2]/img

你瞅瞅网页会发现每一个有几张图片 每张地址都在一个p标签下的img标签的src属性中

把这个2去掉变成:

//*[@id=”post_content”]/p/img

就变成了所有p标签下的img标签了!加上 /@src 后所有图片就获取到啦!(不加[0]是因为我们要所有的地址、加了 就只能获取一个了!)

关于XPath更多的用法与功能详解,建议大家去看看w3cschool

看来我确实没有怎么看w3c啊。还是抓个时间去看一下比较好, 毕竟是基础嘛。

大概:废话就这么多,我真是个话痨,感觉。

贴上代码片吧,里面的内容注释都很详细。

步骤1:

spider里面的文件

# -*- coding: utf-8 -*-
# @Time    : 2017/8/27 0:43
# @Author  : 蛇崽
# @Email   : 17193337679@163.com  (主要进行全站爬取的练习)
# @File    : LongXunDaoHangSpider.py 

# crawlspider,rule配合使用可以起到遍历全站的作用,request为请求的接口
from scrapy.spider import CrawlSpider,Rule,Request

# 配合使用Rule进行url规则匹配
from scrapy.linkextractors import LinkExtractor

# scrapy 中用作登陆使用的一个包
from scrapy import FormRequest
from allNet.items import LongXunDaoHang

class longxunDaoHang(CrawlSpider):

    name = 'longxun'

    allowed_domains = ['autohome.com.cn']

    start_urls = ['http://www.autohome.com.cn/shanghai/']

    rules = (
        Rule(LinkExtractor(allow=('\.html',)),callback='parse_item',follow=True),
    )



    def parse_item(self,response):
        print(response.url)
        daohang = LongXunDaoHang()
        daohang['categoryLink'] = response.url
        yield daohang

步骤2:

settings.py的内容:

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

# Scrapy settings for allNet project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     http://doc.scrapy.org/en/latest/topics/settings.html
#     http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
#     http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'allNet'

SPIDER_MODULES = ['allNet.spiders']
NEWSPIDER_MODULE = 'allNet.spiders'


# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'allNet (+http://www.yourdomain.com)'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
COOKIES_ENABLED = True

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

# Enable or disable spider middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
#    'allNet.middlewares.AllnetSpiderMiddleware': 543,
# }

# Enable or disable downloader middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
#    'allNet.middlewares.MyCustomDownloaderMiddleware': 543,
#     'allNet.middleware.JsonWritePipline':300,
# }

# Enable or disable extensions
# See http://scrapy.readthedocs.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'allNet.pipelines.AllnetPipeline': 300,
'allNet.pipelines.JsonWritePipline': 300,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See http://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

步骤3:

piplines.py的内容

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

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


class AllnetPipeline(object):
    def process_item(self, item, spider):
        return item
# 写入json文件
class JsonWritePipline(object):
    def __init__(self):
        self.file = open('汽车之家全站url.json','w',encoding='utf-8')

    def process_item(self,item,spider):
        line  = json.dumps(dict(item),ensure_ascii=False)+"\n"
        self.file.write(line)
        return item

    def spider_closed(self,spider):
        self.file.close()

很奇怪的是,汽车之家这里用的cookie什么的都没有进行设置,但是爬取全站这玩意,它就一直没有报错,昨天晚上十二点左右写的代码,想着用scrapy应该不一会就爬取完了吧,但是现在早上还一直在爬,我也是醉了,晚上好几次电脑进行休眠了,然后我又把他重新弄亮了,现在有点奇葩的是,现在spider还在运行着,但是json文件写不进去了,蛮怪怪的。最后上张爬取成果图吧:

这里写图片描述

这里留给自己一个作业:在爬取的url中进行数据的提取,存储,简单点:就是url下面内容的进行保存。(捂脸.jpg)

源码会上传到github上的。
https://github.com/643435675/PyStudy

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,653评论 4 46
  • 最近想在工作相关的项目上做技术改进,需要全而准的车型数据,寻寻觅觅而不得,所以就只能自己动手丰衣足食,到网上获(窃...
    littlelory阅读 3,871评论 7 19
  • 这两天摸索了下scrapy,刚看文档的时候觉得有点生无可恋,scrapy框架个人还是觉得比较难懂的,需要学习的地方...
    Treehl阅读 5,623评论 7 10
  • 忙于学业,忙于考试,寥寥几笔,暑假一定会认认真真画的!
    八爪bababa阅读 166评论 1 3
  • 文/珒若放 漫天薄霜染了夜的黑发旦夕间 白夜苍苍北方留守的鸟儿只有檐下的麻雀短促寂寥的尖叫唤着清晨的乳名一滴年少...
    珒若风阅读 588评论 57 77