python:网络爬虫的学习笔记

如果要爬取的内容嵌在网页源代码中的话,直接下载网页源代码再利用正则表达式来寻找就ok了。下面是个简单的例子:

1 import urllib.request
2
3 html = urllib.request.urlopen(‘http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93536‘)
4 html = html.read().decode(‘utf-8‘)

注意,decode方法有时候可能会报错,例如

1 html = urllib.request.urlopen(‘http://china.nba.com/‘)
2
3 html = html.read().decode(‘utf-8‘)
4 Traceback (most recent call last):
5
6   File "<ipython-input-6-fc582e316612>", line 1, in <module>
7     html = html.read().decode(‘utf-8‘)
8
9 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd6 in position 85: invalid continuation byte

具体原因不知道,可以用decode的一个参数,如下

1 html = html.read().decode(‘utf-8‘,‘replace‘)
2
3 html = urllib.request.urlopen(‘http://china.nba.com/‘)
4 html = html.read().decode(‘utf-8‘,‘replace‘)
5
6 html
7 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 这个网址挺不错的)

接下来就是用正则表达式把这个字符串扣下来了:

1 re.findall(‘<h1>.*?</h1>‘,html)
2 Out[35]: [‘<h1>Master of Advanced Leadership Practice (<span>MALP</span>)</h1>‘]

剩下的就是对字符串的切割了:

1 course = re.findall(‘<h1>.*?</h1>‘,html)
2 course = str(course[0])
3 course = course.replace(‘<h1>‘,‘‘)
4 course = course.replace(‘(<span>MALP</span>)</h1>‘,‘‘)

结果:

 1 course = re.findall(‘<h1>.*?</h1>‘,html)
 2
 3 course = str(course[0])
 4
 5 course = course.replace(‘<h1>‘,‘‘)
 6
 7 course = course.replace(‘ (<span>MALP</span>)</h1>‘,‘‘)
 8
 9 course
10 Out[40]: ‘Master of Advanced Leadership Practice‘

把它写成一个函数:

1 def get_course(url):
2     html = urllib.request.urlopen(url)
3     html = html.read().decode(‘utf-8‘)
4     course = re.findall(‘<h1>.*?</h1>‘,html)
5     course = str(course[0])
6     course = course.replace(‘<h1>‘,‘‘)
7     course = course.replace(‘ (<span>MALP</span>)</h1>‘,‘‘)
8     return course

这样输入该学校的其他课程的网址,同样也能把那个课程的名称扣下来(语文不好,请见谅)

1 get_course(‘http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93059‘)
2 Out[48]: ‘Master of Counselling Studies (<span>MCounsStuds</span>)</h1>‘

这就很尴尬了,原因是第二个replace函数,pattern是错误的,看来还得用正则改一下

1 def get_course(url):
2     html = urllib.request.urlopen(url)
3     html = html.read().decode(‘utf-8‘)
4     course = re.findall(‘<h1>.*?</h1>‘,html)
5     course = str(course[0])
6     course = course.replace(‘<h1>‘,‘‘)
7     repl = str(re.findall(‘ \(<span>.*?</span>\)</h1>‘,course)[0])
8     course = course.replace(repl,‘‘)
9     return course

再试试

1 get_course(‘http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93059‘)
2 Out[69]: ‘Master of Counselling Studies‘

搞定!

其实可以用BeautifulSoup直接解析源代码,使得查找定位更快。下一篇在说吧

这其实是我在广州第一份工作要干的活,核对网址是否存在,是否还是原来的课程。那个主管要人工核对。。。1000多个网址,他说他就是自己人工核对的,哈哈,我可不愿意干这活。当时也尝试用R语言去爬取课程名,试了很久。。。比较麻烦吧,后来学了python。现在要核对的话估计十分钟就能搞定1000多个网址了吧。就想装个b,大家可以无视

时间: 2024-11-10 09:00:37

python:网络爬虫的学习笔记的相关文章

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

python网络爬虫学习资料

第一:Python爬虫学习系列教程(来源于某博主:http://cuiqingcai.com/1052.html) Python版本:2.7 整体目录: 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库的高级用法 5. Python爬虫入门五之URLError异常处理 6. Python爬虫入门六之Cookie的使用 7. Python爬虫入门七之正则

Python网络爬虫基础知识学习

对Python有一些简单了解的朋友都知识Python编程语言有个很强大的功能,那就是Python网络爬虫(http://www.maiziedu.com/course/python/645-9570/),一提到Python,就会想到相关的Python爬虫和scrapy等等,今天就来简单认识学习Python爬虫的基础知识,有了一定的相关爬虫知识,以后学习scrapy.urllib等等知识时,会相对轻松些. 爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组

Python网络爬虫笔记(五):下载、分析京东P20销售数据

(一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面的请求. 从Preview页签可以看出,这个请求是获取评论信息的 2.      对比第一页.第二页.第三页-请求URL的区别 可以发现 page=0.page=1,0和1指的应该是页数. 第一页的 request url:没有这个rid=0& . 第二.三页-的request url:多了这个ri

学习《从零开始学Python网络爬虫》PDF+源代码+《精通Scrapy网络爬虫》PDF

学习网络爬虫,基于python3处理数据,推荐学习<从零开始学Python网络爬虫>和<精通Scrapy网络爬虫>. <从零开始学Python网络爬虫>是基于Python 3的图书,代码挺多,如果是想快速实现功能,这本书是一个蛮好的选择. <精通Scrapy网络爬虫>基于Python3,深入系统地介绍了Python流行框架Scrapy的相关技术及使用技巧. 学习参考: <从零开始学Python网络爬虫>PDF,279页,带目录,文字可复制: 配套

爬虫学习 04.Python网络爬虫之requests模块(1)

爬虫学习 04.Python网络爬虫之requests模块(1) 引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. 今日概要 基于requests的get请求 基于requests模块的post请求 基于requests模块ajax的get请求 基于requests模块ajax的post请求 综合项目练习:爬取国家药品监

爬虫学习 06.Python网络爬虫之requests模块(2)

爬虫学习 06.Python网络爬虫之requests模块(2) 今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 了解cookie和session - 无状态的http协议 如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只需要发送页面请求,服务器返回内容.对于服务器来说,并不关心,也并不知道是哪个用户的请求.对于一般浏览性的网页来说

爬虫学习 05.Python网络爬虫之三种数据解析方式

爬虫学习 05.Python网络爬虫之三种数据解析方式 引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,本次课程中会给大家详细介绍讲解三种聚焦爬虫中的数据解析方式.至此,我们的数据爬取的流程可以修改为: 指定url 基于r

爬虫学习 08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS

爬虫学习 08.Python网络爬虫之图片懒加载技术.selenium和PhantomJS 引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -*- import requests from lxml import