python|网络爬虫

概述

这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识。

什么是网络爬虫

简单的讲,网络爬虫就是模拟人访问web站点的行为来获取有价值的数据。专业的解释:百度百科

分析爬虫需求

确定目标

爬取豆瓣热度在Top100以内的电影的一些信息,包括电影的名称、豆瓣评分、导演、编剧、主演、类型、制片国家/地区、语言、上映日期、片长、IMDb链接等信息。

分析目标
  1. 借助工具分析目标网页

    首先,我们打开豆瓣电影·热门电影,会发现页面总共20部电影,但当查看页面源代码当时候,在源代码中根本找不到这些电影当信息。这是为什么呢?原来豆瓣在这里是通过ajax技术获取电影信息,再动态的将数据加载到页面中的。这就需要借助Chrome的开发者工具,先找到获取电影信息的API。

    然后对电影详情页进行分析

思路分析

具体实现

开发环境

python3.6

pycharm

主要依赖库

urllib -- 基础性的网络相关操作

lxml -- 通过xpath语法解析HTML页面

json -- 对通过API获取的JSON数据进行操作

re -- 正则操作

代码实现
from urllib import request
from lxml import etree
import json
import re
import ssl # 全局取消证书验证
ssl._create_default_https_context = ssl._create_unverified_context def get_headers():
"""
返回请求头信息
:return:
"""
headers = {
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/65.0.3325.181 Safari/537.36"
}
return headers def get_url_content(url):
"""
获取指定url的请求内容
:param url:
:return:
"""
content = ''
headers = get_headers()
res = request.Request(url, headers=headers)
try:
resp = request.urlopen(res, timeout=10)
content = resp.read().decode('utf-8')
except Exception as e:
print('exception: %s' % e)
return content def parse_content(content):
"""
解析网页
:param content:
:return:
"""
movie = {}
html = etree.HTML(content)
try:
info = html.xpath("//div[@id='info']")[0]
movie['director'] = info.xpath("./span[1]/span[2]/a/text()")[0]
movie['screenwriter'] = info.xpath("./span[2]/span[2]/a/text()")[0]
movie['actors'] = '/'.join(info.xpath("./span[3]/span[2]/a/text()"))
movie['type'] = '/'.join(info.xpath("./span[@property='v:genre']/"
"text()"))
movie['initialReleaseDate'] = '/'.\
join(info.xpath(".//span[@property='v:initialReleaseDate']/text()"))
movie['runtime'] = \
info.xpath(".//span[@property='v:runtime']/text()")[0] def str_strip(s):
return s.strip() def re_parse(key, regex):
ret = re.search(regex, content)
movie[key] = str_strip(ret[1]) if ret else '' re_parse('region', r'<span class="pl">制片国家/地区:</span>(.*?)<br/>')
re_parse('language', r'<span class="pl">语言:</span>(.*?)<br/>')
re_parse('imdb', r'<span class="pl">IMDb链接:</span> <a href="(.*?)" '
r'target="_blank" rel="nofollow">')
except Exception as e:
print('解析异常: %s' % e)
return movie def spider():
"""
爬取豆瓣前100部热门电影
:return:
"""
recommend_moives = []
movie_api = 'https://movie.douban.com/j/search_subjects?' \
'type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend' \
'&page_limit=100&page_start=0'
content = get_url_content(movie_api)
json_dict = json.loads(content)
subjects = json_dict['subjects']
for subject in subjects:
content = get_url_content(subject['url'])
movie = parse_content(content)
movie['title'] = subject['title']
movie['rate'] = subject['rate']
recommend_moives.append(movie)
print(len(recommend_moives))
print(recommend_moives) if __name__ == '__main__':
spider()

效果

总结

本文较详细的阐述了一个爬虫从需求->分析->实现的过程,并给出了具体的代码实现。通过对本文的学习,我们可以了解到网络爬虫的一些基本的知识,以及python的一些基本库的使用方法。接下来我会使用一些高级些的网络操作相关的库以及对抓取到的数据做个存储的方式,来更深层次的理解python网络爬虫。

特别声明
1. 本文涉及到的豆瓣网是国内知名网站,若有侵权之处,请告知。
2. 本文属作者原创,转载请标明出处;未经允许,不得用于商业用途。
3. 本文只是用作网络爬虫技术学习交流,读者涉及到的任何侵权问题,与本文作者无关。

笔者对应的[简书文章](https://www.jianshu.com/p/fc22c0ffe65b)

一个简单的python爬虫程序的更多相关文章

  1. 一个简单的C#爬虫程序

    这篇这篇文章主要是展示了一个C#语言如何抓取网站中的图片.实现原理就是基于http请求.C#给我们提供了HttpWebRequest和WebClient两个对象,方便发送请求获取数据,下面看如何实 1 ...

  2. 一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: # -*- cod ...

  3. 【Python学习笔记三】一个简单的python爬虫

    这里写爬虫用的requests插件 1.一般那3.x版本的python安装后都带有相应的安装文件,目录在python安装目录的Scripts中,如下:   2.将scripts的目录配置到环境变量pa ...

  4. 一个简单的python爬虫,以豆瓣妹子“http://www.dbmeizi.com/category/2?p= ”为例

    本想抓取网易摄影上的图,但发现查看html源代码时找不到图片的url,但firebug却能定位得到.(不知道为什么???) 目标是抓取前50页的爆乳图,代码如下: import urllib2,url ...

  5. 一个简单的python爬虫(转)

    # -*- coding: utf-8 -*- #--------------------------------------- # 程序:百度贴吧爬虫 # 版本:0.1 # 作者:why # 日期: ...

  6. 一个简单的Python爬虫

    写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 从网页http://mm.taobao.com/json/request_top_list.htm?type ...

  7. python实现的一个简单的网页爬虫

    学习了下python,看了一个简单的网页爬虫:http://www.cnblogs.com/fnng/p/3576154.html 自己实现了一个简单的网页爬虫,获取豆瓣的最新电影信息. 爬虫主要是获 ...

  8. 简单的python爬虫教程:批量爬取图片

    python编程语言,可以说是新型语言,也是这两年来发展比较快的一种语言,而且不管是少儿还是成年人都可以学习这个新型编程语言,今天南京小码王python培训机构变为大家分享了一个python爬虫教程. ...

  9. 做一个简单的scrapy爬虫

    前言: 做一个简单的scrapy爬虫,带大家认识一下创建scrapy的大致流程.我们就抓取扇贝上的单词书,python的高频词汇. 步骤: 一,新建一个工程scrapy_shanbay 二,在工程中中 ...

随机推荐

  1. 关于windows映射网络驱动器,登录时重新连接

    如果想登录系统后映射盘符还在,但是不自动连接,则参考下面方法.方法其实很简单,关键的步骤是:登录共享的时候,登录界面取消选中“保存凭据”,然后映射的时候,选择“下次开机是重新连接” 这样,下次开机的时 ...

  2. callback回调函数的理解

    callback采用的设计模式是:模板模式,他的设计理念是基于面向对象中的多态的. 我们的程序中走到某个地方他会出现不一样的动作的时候,我们在这儿就使用回调函数.我们利用的就是 多态的原理,我们传递不 ...

  3. xpath | 计算两个节点集

    url = li.xpath("./div/div[2]/a/@href | ./div/div[2]/div[2]/a/@href").extract_first()

  4. RNA-seq 数据文件处理

    http://www.fungenomics.com/article/30 [专题]基因组学技术专题(二)-- 为什么说FPKM/RPKM是错的 下载数据 wget是linux下一个从网络上自动下载文 ...

  5. Java 并发开发:Lock 框架详解

    摘要: 我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多 ...

  6. 利用 SPICE 分析理解心电图前端中的右腿驱动

      [导读] 心电图(ECG)学是一门将心脏离子去极(ionic depolarization) 后转换为分析用可测量电信号的科学.模拟电子接口到电极/患者设计中最为常见的难题之一便是优化右腿驱动 ( ...

  7. Debug程序的使用

    一.什么是Debug程序: Debug是DOS, Windows(但是Win7 64位没有,8 10不清楚.)都提供的实模式程序的调试工具, 使用它,可以查看CPU各种寄存器中的内容,内存的情况和在机 ...

  8. java GMT时间转换为CST时间

    今天在获取windchill的“上次修改时间”的时候发现获取的是GMT时间,但是我们常用的是CST时间 一开始尝试直接设置为CST时区,TimeZone.getTimeZone("CST&q ...

  9. 在LINUX(Ubuntu 18.04.x、CentOS)下配置MySQL8.0.x

    安装教程:Installing MySQL on Unix/Linux Using Generic Binaries MySQL下载链接:https://dev.mysql.com/downloads ...

  10. springBoot 自动配置原理--自己新建一个 starter

    上篇我们说到 springboot 和 SSM 框架的区别,今天我们就看看 springboot 到底为我们做了哪些事情,让我们开发变得如此简单. springboot 中起着重要作用的是 start ...