Python 爬虫 正则抽取网页数据和Scrapy简单使用

多图预警 希望进来的时候你是wifi 好像这句话要放在标题上哈....

Python新手 前些天看了一些基本语法发现继续看下去效果甚微(枯(ji)燥(mo)了)
知乎上面的大神 都说爬虫 那我就从爬虫开始实践学习吧
先从简单的静态的一个页面开始

干什么都得按照套路来 一哥们经常这样说 干啥事都有套路 跟着我左手右手一个慢动作

如果不使用框架Scrapy
我们拿到这个网页的源文件之后
就得自己用正则表达式来抽取想要的数据

这里拿糗百做实验 为什么是糗百 因为我看的资料是糗百(无辜的糗百,宝宝不哭)

Paste_Image.png
  • 先要分析页面 看怎么抽取出来我们想要的数据
Paste_Image.png

发现段子都在这个<div class="content">text</div>标签里面
所以代码这么实现

 #coding=utf-8
__author__ = 'Daemon'

import urllib2,re,time

class CB_Spider:
    def __init__(self):
        self.page=1
        self.enable=True

#正则获取段子内容
def getPageContent(self):
    myUrl='http://www.qiushibaike.com/hot/page/'+str(self.page)
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent' : user_agent }
    req = urllib2.Request(myUrl, headers = headers)  #模拟浏览器
    myResponse=urllib2.urlopen(req)
    myPgae=myResponse.read()
    unicodePage=myPgae.decode('utf-8')
    #根据正则表达式拿到所有的内容
    myItems=re.findall('<div.*?class="content">(.*?)</div>',unicodePage,re.S)
    items=[]

    print u'第%s页数据展示 ' %self.page

    for item in myItems:
        content=item.strip()
        #拿到最后的<!--12345678910-->时间戳
        timeContent=re.findall(r'<!--(.*?)-->',content)
        #去掉时间戳
        pattern=re.compile(r'<!--(.*?)-->')
        content=re.sub(pattern,'',content)
        if len(timeContent)>0:
            timeContent=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(int(timeContent[0])))
        else:
            timeContent=''
        #每个段子前加上发布时间
        print timeContent +'\n'+content

    self.page+=1;

print u'''

-----------------------------
操作:输入daemon退出
功能:按下回车依次浏览今日的糗百热点
-----------------------------

'''

cbSpider=CB_Spider()
while cbSpider.enable:
    myInput=raw_input()
    if 'daemon'==myInput:
        cbSpider.enable=False
    break
    else:
        cbSpider.getPageContent()
xbspider.gif

到这里就是全部的代码 用正则自己抽取相关网页的内容

但是一般人不这么玩 在实际项目中 还得用框架 我开发Android的 我也不会啥都自己写 来看看Scrapy的简单使用 怎么获取和上面一样的结果

先要安装相关的环境 我是按照这个地址给出安装步骤进行 当然不会每个人都一切顺利


QQ图片20160121143913.gif

遇到问题去Google 基本都能解决 这里不是重点
Scrapy安装

安装好了之后 第一步

  • 创建一个scrapy工程 看图上的CMD 命令行
Paste_Image.png
  • 我这里用的的Pycharm来打开这个工程 这里只是为了结构看起来方便和写代码方便 因为这里最后还是得靠cmd 来执行 还没将Pycharm和Scrapy配置起来 后面学习的时候跟着主流走
    工程结构如下


    Paste_Image.png

这里就是创建工程 现在来到我们的项目ScrapyDemo1 写好的

Paste_Image.png

看看这几个文件能干嘛
items.py 写上自己的爬虫需要的数据的类 和相关属性 相当于在解析数据时的接收器

Paste_Image.png

setting.py 看名字就知道是配置文件 样子长这样 这里是默认的哈

Paste_Image.png

其余的几个暂时没用到 先不说

xb_spider.py 就是我们的实现文件

#coding=utf-8
from scrapy import Spider

from ScrapyDemo1.items import XBItem

from scrapy.selector import Selector
__author__ = 'Daemon'

class XBSpider(Spider):
    name='xb'  #必须
    #allowed_domains = ["qiushibaike.com"]
    #必须
    start_urls=[
        'http://www.qiushibaike.com/8hr/page/1'
    ]

#必须
def parse(self, response):
    sel=Selector(response)
    sites=sel.xpath('//div[@class="content"]')
    #
    # filename = 'xbdata'
    # open(filename, 'w+').write(len(sites))

    items=[]
    for site in sites:
        item=XBItem()
        item['content']=site.xpath('text()').extract()
        print items.append(item)
    return items

用到了Selector Xpath
Selector文档
Xpath文档

W3c的截图

Paste_Image.png

知道这些 基本能见到的实践加调试运用了 因为我也是新手


Paste_Image.png

在我的代码中 是这样 sites=sel.xpath('//div[@class="content"]') 获取<div class='content'>他

然后他的text()就是内容

现在启动程序 获取数据存储本地

Paste_Image.png

现在生产了json文件 我们打开看看


Paste_Image.png

发现啥都没有 当时就懵逼是吧? 是的懵逼了 哈哈哈

Paste_Image.png

那这里我们就看日志呗 找到错误日志 就好办了


Paste_Image.png
Paste_Image.png

报错都给你了 你可以去google搜索 其实想想都知道 上面正则的时候我们模拟了浏览器 这里我们没有
我们进去setting.py设置就行了

Paste_Image.png

再来重新运行一遍 发现数据存在了 而已已经用json文本保存

Paste_Image.png

只是一个静态的页面的数据爬取 当然写这边文章的目的就是为了实践这个Scrapy框架和对Python的熟悉 增加理解

写这边文章的时候 听的是这首歌


Paste_Image.png

爱要怎么说出口

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

推荐阅读更多精彩内容