从第一章到上一章为止,基本把python所有的基础点都已经包括了,我们有控制逻辑的关键字,有内置数据结构,有用于工程需要的函数和模块,又有了标准库和第三方库,可以写正规的程序了。

python可以做非常多的事情,最火爆的事情应该是大家一直都在讨论的爬虫,这里编写一个简单的爬虫例子,它能够真正的运行,但主要的目的是在提高对之前知识点的理解和熟悉python如何编写简单工程。

编写一个爬虫,爬取www.duitang.com网站的数据,主要的功能是通过搜索词得到搜索结果,并分析网页得到商品图片的链接地址并下载图片。

程序的各个模块功能

爬虫的一个重要的模块是根据url获取网页数据,我们利用前面一章介绍的第三方库requests,用简单的几行代码来抓取网页数据,可以熟悉函数的写法和逻辑控制。

def get_http_content(url):

    s = requests.Session()

    request = s.get(url, headers = headers,timeout=120, verify=False)
body = ''
if request.status_code == 200:
body = request.text
return body

下载图片的功能如下:

def get_image( url, name):
image_path = os.path.join('images/', name)
if not os.path.exists(image_path):
r = requests.get(url, stream=True, headers=headers)
if r.status_code == 200:
with open(image_path, 'wb') as f:
for chunk in r:
f.write(chunk)
else:
print('==> get image error: ', url)

get_image有两个参数,一个是图片的url地址,一个是图片的名称,为了不想有太多的参数,图片存放的地址在程序中写的是当前路径下的images/目录。

程序的逻辑控制

这里我们会详细的解释如何对网站进行分析,如何抽取出我们最想要的数据来满足我们的需求。先用浏览器打开链接 https://www.duitang.com/search/?kw=%E4%B8%AD%E7%A7%8B%E8%8A%82&type=feed&from=tuijian 我们搜索的是中秋节这个关键字,如下:

查看网页的源代码,也就是我们通过get_http_content 能够得到的数据,一般来说可以利用Beautiful Soup对数据进行处理,并取出关键的字段。但duitang的搜索比较特殊,通过它分页的数据可以看出是动态加载网页内容,查看网络请求,看看是哪一个网络接口。

通过网络请求的数据,查到了搜索的分页数据,接口在

https://www.duitang.com/napi/blog/list/by_search/?kw=%E4%B8%AD%E7%A7%8B%E8%8A%82&type=feed&_type=&start=0

分析里面的接口参数,start为分页参数,要取得所有的分页数据只需要改变这个参数。

如,第二页数据在:

https://www.duitang.com/napi/blog/list/by_search/?kw=%E4%B8%AD%E7%A7%8B%E8%8A%82&type=feed&_type=&start=24

可以使用for循环,取前十页的数据:

url_start = 'https://www.duitang.com/napi/blog/list/by_search/?kw=%E4%B8%AD%E7%A7%8B%E8%8A%82&type=feed&_type=&start='
for i in range(0,10):
url = url_start + str(i*24)

整个流程如下:

if __name__ == '__main__':

    # 接口地址
url_start = 'https://www.duitang.com/napi/blog/list/by_search/?kw=%E4%B8%AD%E7%A7%8B%E8%8A%82&type=feed&_type=&start='
next_start = 0
while True:
#获取api接口数据
url = url_start + str(next_start)
content = get_http_content(url)
json_data = json.loads(content) # 分析得出图片地址,并下载
for object_list in json_data['data']['object_list']:
image_path = object_list['photo']['path']
image_name = os.path.basename(image_path)
get_image(image_path,image_name) #下一页
next_start = json_data['data']['next_start'] # 分页结束
if next_start == 0:
break

程序通过不断的取得分页的数据,用json模块解析数据,提出图片的地址,并下载图片。在images/ 目录下存放着下载的图片文件。

总结

一个简单的对网页进行爬取,并根据自己的需求提取网页中所需要的字段,并对字段进行处理,这里仅仅是对图片进行了下载,你还可以对需求进一步的进行扩展,比如把特殊的字段存到数据库中,搜索更多的热词等,进行更多的尝试。

更多教程:阿猫学编程

爬虫入门-使用python写简单爬虫的更多相关文章

  1. Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!

    python3爬虫遇到了反爬 当你兴冲冲的打开一个网页,发现里面的资源好棒,能批量下载就好了,然后感谢写个爬虫down一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...

  2. 用python写网路爬虫 PDF高清完整版免费下载 Python基础教程免费电子书 python入门书籍免费下载

    <用python写网路爬虫PDF免费下载>PDF书籍下载 内容简介 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你 ...

  3. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

  4. 读书笔记汇总 --- 用Python写网络爬虫

    本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...

  5. 用Python写网络爬虫 第二版

    书籍介绍 书名:用 Python 写网络爬虫(第2版) 内容简介:本书包括网络爬虫的定义以及如何爬取网站,如何使用几种库从网页中抽取数据,如何通过缓存结果避免重复下载的问题,如何通过并行下载来加速数据 ...

  6. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  7. python实现简单爬虫抓取图片

    最近在学习python,正如大家所知,python在网络爬虫方面有着广泛的应用,下面是一个利用python程序抓取网络图片的简单程序,可以批量下载一个网站更新的图片,其中使用了代理IP的技术. imp ...

  8. Python开发简单爬虫(一)

    一 .简单爬虫架构: 爬虫调度端:启动爬虫,停止爬虫,监视爬虫运行情况 URL管理器:对将要爬取的和已经爬取过的URL进行管理:可取出带爬取的URL,将其传送给“网页下载器” 网页下载器:将URL指定 ...

  9. Python开发简单爬虫

    简单爬虫框架: 爬虫调度器 -> URL管理器 -> 网页下载器(urllib2) -> 网页解析器(BeautifulSoup) -> 价值数据 Demo1: # codin ...

随机推荐

  1. Python dict 字典 keys和values对换

    原字典: d1 = { 'en':'英语', 'cn':'中文', 'fr':'法语', 'jp':'日语' } 经过相互对换: d1_inverse = {values:keys for keys, ...

  2. C++对象的动态建立与释放

    new运算符动态分配堆内存  (从堆分配一块“类型”大小的存储空间,并且返回首地址) 1.写程序的时候,经常需要动态的分配和撤销内存空间,C语言中常常是利用库函数 malloc 和 free 来分配和 ...

  3. MySQL数据库数据迁移:从一个服务器到另一个服务器

    需要两个服务器数据库版本相同才可迁移 1:单个或多个数据库 mysqldump -h远程ip -u用户 -p密码 -P3306 -- -uroot -p -P3306 执行后输入本地数据库密码即可 : ...

  4. \_\_getattribute\_\_

    __getattribute__ 一.__getattr__ 不存在的属性访问,触发__getattr__ class Foo: def __init__(self, x): self.x = x d ...

  5. iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码

    iOS精选源码 如丝般顺滑的微信朋友圈(点赞,评论,图文混排表情,... 动态菜单第三版本:动态项,自适应方向 仿appstore首页滚动效果 iOS 透明导航栏方案 TransparentNavig ...

  6. idea快捷键(最常用)

    --跳到上一空白行 ctrl+alt+enter --跳到下一空白行 shift+enter --为代码生成包裹快(try catch等) ctrl+alt+t --跳到某行 ctrl+g --实现父 ...

  7. C语言代码在内存中的存储

    http://blog.chinaunix.net/uid-26430381-id-4359960.html

  8. Educational Codeforces Round 55 (Rated for Div. 2)E

    题:https://codeforces.com/contest/1082/problem/E 题意:给出n个数和一个数c,只能操作一次将[L,R]之间的数+任意数,问最后该序列中能存在最多多少个c ...

  9. debian8.8更新源

    ##163源 deb http://mirrors.163.com/debian/ jessie main non-free contribdeb http://mirrors.163.com/deb ...

  10. Chapter2. Vector Analysis (Field and Wave Electromagnetics. Second Edition) David K. Cheng

    2-1 Introduction imperative adj.紧急的 deficiency adj. 缺点,缺乏,缺陷 awkward adj .令人尴尬的