python:网络爬虫的学习笔记
如果要爬取的内容嵌在网页源代码中的话,直接下载网页源代码再利用正则表达式来寻找就ok了。下面是个简单的例子:
import urllib.request html = urllib.request.urlopen('http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93536')
html = html.read().decode('utf-8')
注意,decode方法有时候可能会报错,例如
html = urllib.request.urlopen('http://china.nba.com/') html = html.read().decode('utf-8')
Traceback (most recent call last): File "<ipython-input-6-fc582e316612>", line 1, in <module>
html = html.read().decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 85: invalid continuation byte
具体原因不知道,可以用decode的一个参数,如下
html = html.read().decode('utf-8','replace') html = urllib.request.urlopen('http://china.nba.com/')
html = html.read().decode('utf-8','replace') html
Out[9]: '<!DOCTYPE html>\r\n<html>\r\n<head lang="en">\r\n <meta charset="UTF-8">\r\n <title>NBA�й��ٷ���վ</title>\r\n <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">\r\n <meta name="description" content="NBA�й��ٷ���վ">\r\n <meta name="keywords"
replace表示遇到不能转码的字符就将其替换成问号还是什么的。。。这也算是一个折中的方法吧。我们继续回到正题。假如说我们想爬取上面提到的网页的课程名称
查看网页源代码。我用的谷歌浏览器,右键单击页面,再选择‘查看网页源代码’
再在这个页面上ctrl+F,查找你要爬取的字符:
这个就刚才截图所对应的代码(想看懂源代码还得学习一下html语言啊 http://www.w3school.com.cn/html/index.asp 这个网址挺不错的)
接下来就是用正则表达式把这个字符串扣下来了:
re.findall('<h1>.*?</h1>',html)
Out[35]: ['<h1>Master of Advanced Leadership Practice (<span>MALP</span>)</h1>']
剩下的就是对字符串的切割了:
course = re.findall('<h1>.*?</h1>',html)
course = str(course[0])
course = course.replace('<h1>','')
course = course.replace('(<span>MALP</span>)</h1>','')
结果:
course = re.findall('<h1>.*?</h1>',html) course = str(course[0]) course = course.replace('<h1>','') course = course.replace(' (<span>MALP</span>)</h1>','') course
Out[40]: 'Master of Advanced Leadership Practice'
把它写成一个函数:
def get_course(url):
html = urllib.request.urlopen(url)
html = html.read().decode('utf-8')
course = re.findall('<h1>.*?</h1>',html)
course = str(course[0])
course = course.replace('<h1>','')
course = course.replace(' (<span>MALP</span>)</h1>','')
return course
这样输入该学校的其他课程的网址,同样也能把那个课程的名称扣下来(语文不好,请见谅)
get_course('http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93059')
Out[48]: 'Master of Counselling Studies (<span>MCounsStuds</span>)</h1>'
这就很尴尬了,原因是第二个replace函数,pattern是错误的,看来还得用正则改一下
def get_course(url):
html = urllib.request.urlopen(url)
html = html.read().decode('utf-8')
course = re.findall('<h1>.*?</h1>',html)
course = str(course[0])
course = course.replace('<h1>','')
repl = str(re.findall(' \(<span>.*?</span>\)</h1>',course)[0])
course = course.replace(repl,'')
return course
再试试
get_course('http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93059')
Out[69]: 'Master of Counselling Studies'
搞定!
其实可以用BeautifulSoup直接解析源代码,使得查找定位更快。下一篇在说吧
这其实是我在广州第一份工作要干的活,核对网址是否存在,是否还是原来的课程。那个主管要人工核对。。。1000多个网址,他说他就是自己人工核对的,哈哈,我可不愿意干这活。当时也尝试用R语言去爬取课程名,试了很久。。。比较麻烦吧,后来学了python。现在要核对的话估计十分钟就能搞定1000多个网址了吧。就想装个b,大家可以无视
python:网络爬虫的学习笔记的更多相关文章
- Python网络爬虫与信息提取笔记
直接复制粘贴笔记发现有问题 文档下载地址//download.csdn.net/download/hide_on_rush/12266493 掌握定向网络数据爬取和网页解析的基本能力常用的 Pytho ...
- 《用Python写爬虫》学习笔记(一)
注:纯文本内容,代码独立另写,属于本人学习总结,无任何商业用途,在此分享,如有错误,还望指教. 1.为什么需要爬虫? 答:目前网络API未完全放开,所以需要网络爬虫知识. 2.爬虫的合法性? 答:爬虫 ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- 《用Python写爬虫》学习笔记(二)编写第一个网络爬虫
1.首先,下载网页使用Python的urllib2模块,或者Python HTTP模块request来实现 urllib2会出现问题,解决方法1.重试下载(设置下载次数) 2.设置用户代理 2.其次, ...
- 《Python网络编程》学习笔记--从例子中收获的计算机网络相关知识
从之前笔记的四个程序中(http://www.cnblogs.com/take-fetter/p/8278864.html),我们可以看出分别使用了谷歌地理编码API(对URL表示地理信息查询和如何获 ...
- 《Python网络编程》学习笔记--UDP协议
第二章中主要介绍了UDP协议 UDP协议的定义(转自百度百科) UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务 ...
- 关于Python网络爬虫实战笔记①
python网络爬虫项目实战笔记①如何下载韩寒的博客文章 python网络爬虫项目实战笔记①如何下载韩寒的博客文章 1. 打开韩寒博客列表页面 http://blog.sina.com.cn/s/ar ...
- 【python网络爬虫】之requests相关模块
python网络爬虫的学习第一步 [python网络爬虫]之0 爬虫与反扒 [python网络爬虫]之一 简单介绍 [python网络爬虫]之二 python uillib库 [python网络爬虫] ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
随机推荐
- vue创建项目步骤
# 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project ...
- Spring面试题整理
1.https://blog.csdn.net/a745233700/article/details/80959716 2.https://ifeve.com/spring-interview-que ...
- python之时间日期time
常用的时间函数如下获取当前日期:time.time()获取元组形式的时间戳:time.local(time.time())格式化日期的函数(基于元组的形式进行格式化):time.asctime(tim ...
- php打包下载以及断点续传
php下载单文件 以及 多文件打包下载,支持断点续传 断点续传的功能未经验证 需要nginx或者apache服务器指定静态文件,png, mp4, zip等后缀文件的目录, 直接实例化并调用 down ...
- OpenResty 执行流程阶段
nginx有11个处理阶段,如下图所示: 指令 所处处理阶段 使用范围 解释 init_by_luainit_by_lua_file loading-config http nginx Master进 ...
- 7.Nginx_Keepalived高可用配置
2. 利用keepalived实现高可靠配置(HA) 2.1. 高可靠概念 HA(High Available):高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节 ...
- dubbo 框架
2.1 dubbo Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和 ...
- zoomeye使用
简介 ZoomEye是一款针对网络空间的搜索引擎,收录了互联网空间中的设备.网站及其使用的服务或组件等信息. ZoomEye 拥有两大探测引擎:Xmap 和 Wmap,分别针对网络空间中的设备及网站, ...
- LabVIEW中的波形图表(Chart)与波形图(Graph)
在百度上随便找的一个简单的例子: 具体链接:https://jingyan.baidu.com/article/5552ef47deb996518ffbc983.html 波形图表最先出现数据,等待所 ...
- Web Api(1)
由于在学习Web Api没有了解过MVC,觉得有些吃力.很多基础的东西都会一并记录下来. Web API 的意思是使用HTTP协议并通过网络调用的API. API的意思软件外部接口. 在实际的开发中, ...