1.确定爬取的目标

开始之前我们需要确定一个爬取的目标,从博客园上选一个博主的首页进入。在这个例子里面我们要写一个爬虫将博主的文章列表拉出来,保存在一个JSON的文件里面。

2. “种子”的分析,生成爬虫入口

在谷歌浏览器中,打开开发者选项(F12),如图所示,这次项目主要爬取的内容有:发表日期、原文链接、文章标题以及文章摘要。

将网页中的元素选择器写到表内:

下面是对整个爬虫编程思路的整理:

3.编码

我用的是pycharm编辑器,按照上述思路进行编码。

导入必要的依赖包

from __future__ import unicode_literals

from urllib import request

from pyquery import PyQuery as pq

import json

生成种子页的HTTP请求

url = 'https://www.cnblogs.com/Ray-liang/'

with request.urlopen(url) as response:

body = response.read()

item = [] #1. 先定义一个空数组,用于储存提取结果

with open('output.json', 'wt') as f: # 2 将结果写入JSON文件

f.write(json.dumps(items))

上面代码中用到了Python文件处理的知识,with语句是用于指定f的作用域,当f.write调用完成跳出with子句时就会被关闭,这样可以防止打开文件后忘记调用close而锁住文件导致其它的进程不能访问。

还用到了json.dumps方法,将items直接序列化成一个标准的JSON字符串,最后将这个JSON字符串通过调用file对象的write方法写入到文件内。

现在需要解决的是如何生成这个items中的对象数据?

首先,需要将body中的内容读到pyQuery中,然后选出所有的文章元素,最后通过循环每个元素来处理,将元素的值生成一个数据项填充到items中。

文章列表的选择器为.forFlow>.day,而这个选择器一旦执行会返回多个元素的集合,而且我们需要将这个元素集合转化成一个item类型的集合,所以用pyQuery.map函数完成这一转换。

根据上面的分析,代码如下:

from __future__ import unicode_literals

from urllib import request

from pyquery import PyQuery as pq

import json

url = 'https://www.cnblogs.com/baozitraining/'

def parse_item(i, e):

doc = pq(e)

title = doc('.postTitle>a').text()

parmerlink = doc('.postTitle>a').attr('href')

pub_date = doc('.dayTitle').text()

summary = doc('.postCon').text()

result = {

'title': title,

'parmerlink': parmerlink,

'pub_date': pub_date,

'summary': summary

}

print(json.dumps(result))

return result

with request.urlopen(url) as response:

body = response.read()

doc = pq(body)

items = doc('.forFlow>.day').map(parse_item)

with open('output.json', 'wt') as f:

f.write(json.dumps(items, ensure_ascii=False))

需要说明的是,代码中map函数是一个高阶函数,它的参数是另一个处理函数的指针,所以这里引用一个parse_item,这个函数的内部实际上是一个循环,它会将doc(.’forFlow>.day’)一个个传入到parse_item函数中,当循环执行结束后再将多次从parse_item获取的结果合成为一个数组返回。

此外,在代码第一行加入 future模块,目的是解决json.dumps对字符内容进行unicode编码的问题,完成后就会发现在当前爬虫工作目录中会多一个名为output.json的文件,打开它后的样子是:

{"title": "HAAR与DLib的实时人脸检测之实现与对比", "parmerlink": "https://www.cnblogs.com/Ray-liang/p/9900473.html", "pub_date": "2018年11月3日", "summary": "摘要: 人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等。 对于opencv的人脸检测方法,优点是简单,快速;存在的问题是人脸检测效果不好。正面/垂直/光线较好的人脸,该方法可以检测出来,而侧面/歪斜/光线不好的人脸,无法检测。因此,该方法不适合现场应用。而对于dli阅读全文"}

...

总结

设计一个完整爬虫的思路与过程是:

确定爬取目标,分析种子页结构

分析承载数据页面结构,建立数据结构与元素选择器间的映射关系

设计代码流程与编写思路

一个特别适合初学爬虫者的项目,感兴趣的小伙伴赶紧运行代码看看吧!

python多久能上手_Python容易上手的爬虫项目,特别适合基础入门相关推荐

  1. python实现数据爬取——糗事百科爬虫项目

    python实现数据爬取--糗事百科爬虫项目 # urllib.request 请求模块 import urllib.request # re 模块使 Python 语言拥有全部的正则表达式功能. i ...

  2. python多久可以精通_Python要学习多久可以掌握?多久可以精通?

    Python虽然近些年刚刚流行起来,但是想要学习的人是非常多,不少人都想要学习Python语言,那么学习Python多久可以掌握呢?多久可以精通呢?这是大家共同的疑问,接下来小编跟大家介绍一下吧. 自 ...

  3. python就业前景不好_Python就业前景好吗?女生适合吗?

    2017年Python就是开发语言里冲出来的一匹黑马,根据TI‌‌OBE最新排名,Python已超越C#,与Java,C,C++成为全球前5大流行编程语言之一.从云端.客户端,到物联网终端,pytho ...

  4. python输入年月日输出年月日_新手学习必看的0基础入门Python与python的输入输出...

    我平常使用的编程语言主要是Fortran和Python,用于做数值计算,两种语言各具优势,Fortran更快,Python写起来更方便,更适合阅读,而且可以直接对数据进行可视化处理.但是有时候输出数据 ...

  5. python自动化开发例子_Python自动化开发从浅入深-语言基础(常用模块)

    当我们运行python的时候,我们都是在创建并运行一个进程.正如我们在Linux进程基础中介绍的那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python中,我们通过标准 ...

  6. python 三维绘图库_Python第三方库matplotlib(2D绘图库)入门与进阶

    Matplotlib 一 简介: Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形. Matplotlib可用于Python脚 ...

  7. python开发商城实战_python框架Django实战商城项目之工程搭建

    项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...

  8. python写采集程序_python实现简易采集爬虫

    #!/usr/bin/python#-*-coding:utf-8-*- #简易采集爬虫#1.采集Yahoo!Answers,parseData函数修改一下,可以采集任何网站#2.需要sqlite3或 ...

  9. python安卓开发视频_python开发安卓App实战项目:西瓜视频解析工具

    [Python] 纯文本查看 复制代码import os import base64 from kivy.app import App from kivy.network.urlrequest imp ...

  10. 用python搭建微商城_python框架Django实战商城项目之工程搭建

    项目说明 该电商项目类似于京东商城,主要模块有验证.用户.第三方登录.首页广告.商品.购物车.订单.支付以及后台管理系统. 项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用j ...

最新文章

  1. iccv2020论文汇总_ICCV2019 最佳论文出炉,附1987~2019历届ICCV最佳论文汇总( 提供下载)...
  2. 【NLP】万字梳理!BERT之后,NLP预训练模型发展史
  3. 构建制品不一致,后续工作都是白费 | 研发效能提升36计
  4. cocos2d-x 2.2.3 win32程序发布注意
  5. 大数据时代激活数据管理新思路
  6. JACKSON JSON 操作帮助类
  7. C语言学习资料----快速排序
  8. ftp搭建和定时增量同步实现
  9. python语言实现图像的手绘效果
  10. iOS UI 自动化测试原理以及在 Trip.com 的应用实践
  11. 快解析教你,快速注册个人域名
  12. Unity 半透明图片遮挡半透明图片
  13. Java 获取年份-月份
  14. 华三服务器怎样用hdm安装linux,H3C服务器配置HDM用户指南
  15. 真心话大冒险,一款小程序让你看清你朋友的内心
  16. 升职加薪申请书 经典范文
  17. 6句话,读懂什么是通证经济
  18. React学习分享(五)
  19. 系统级应用,重签名后WebView闪退问题
  20. 在Winform环境下Scottplot简单入门

热门文章

  1. 两种方式设置单元格的下划线
  2. sql中毫秒数与格式化时间的转换
  3. 从中报危机看创业板:谁在兜售“上市经济”?
  4. win7台式机系统调节显示屏亮度
  5. 多张DXF格式图纸网页上转换成PDF格式如何操作?
  6. 【WePY小程序框架实战四】-使用asyncawait异步请求数据
  7. 医疗物联网解决方案提供商“识凌科技”完成C轮融资
  8. 如何创建带有.的文件夹
  9. Linux ag命令
  10. Unix Vi命令基本用法