python学习虫师笔记 (一)
虫师博客:http://www.cnblogs.com/fnng/p/3576154.html
我的笔记
初期:一开始学习python是通过看书 第一本python的书叫《python核心编程》美:wesley j.chun第二本是C语言的书叫《C primer plus》看了一半又停了,学习曲线太陡,没什么兴奋感, 看完就忘了,因为光看不做, 一年又一年还是不会,但我想学变成的心没变
现在:于是在前几天2016/8/5,我开始直接上手做,不会的查书,搜google、百度
英语方面,一直在看英文小说,每天一章的进展,现在差不多看完6/7本的样子 如果有人想通过看书学英文,我看过的英文书单可以以后更新出来 都是简单但需要坚持的
开始写博客记录学习
项目(一) 如何开始,从有趣经常用的地方开始,那不就是网络了,和网络相关的不就是爬虫(就是如何把网上好玩的信息copy到自己的文件夹里)了吗?
于是搜索 python 爬虫 第一个http://www.cnblogs.com/fnng/p/3576154.html就是虫师的博客园
上手复制,改动 而不是看书把每一个地方弄清,首先培养兴趣
于是直接把虫师的内容复制下来,在python上运行观察学习(因为我觉得写得还是有点难,所以我加了很多注释帮助大家,复制的时候注释去不去掉随你,不影响运行)
1 #coding=utf-8
2 import urllib #urlib模块,一个标准库,接受url请求等
3
4 def getHtml(url): #自定义一个函数用来获取html代码
5 page = urllib.urlopen(url) #urllib的一个方法,用来打开url
6 html = page.read() #read方法用来读取
7 return html #读取的内容存入html,并返回到getHtml
8
9 html1 = getHtml("http://tieba.baidu.com/p/4590525889?da_from=ZGFfbGluZT1EVCZkYV9wYWdlPTEmZGFfbG9jYXRlPXAwMDY0JmRhX2xvY19wYXJhbT0zJmRhX3Rhc2s9dGJkYSZkYV9vYmpfaWQ9MjM3MDYmZGFfb2JqX2dvb2RfaWQ9NDM3ODYmZGFfdGltZT0xNDcwNDg4MjM2&da_sign=58a0c29287d6df1817926ce918cd05eb&tieba_from=tieba_da")
10 #主程序 返回的html内容存入html1中,并在接下来的print中打印下来 网址随便换
11 print html1 #输出html1内容
补充:urllib2与urllib 前者既可以通过request类设置headers(这个用来模拟也就是伪装成人浏览网页)也接受url,而后者只可以接受url不能伪装,比如糗事百科最近改版,以前直接把上面的网页一换就可以弄下来html的代码,现在需要加入headers进行检验,urllib这个模块就束手无策了
项目(二)自动下载图片改名并存入本地
1 #coding=utf-8
2 import urllib
3 import re #用到了正则表达式模块,用来筛选、、搜索、匹配的强大模块
4
5 def getHtml(url):
6 page = urllib.urlopen(url)
7 html = page.read()
8 return html
9
10 def getImg(html): #前面获得的html代码,在这里进行“清洗”,也就是找到代码中想要的(比如图片的地址等等)
11 reg = r'src="(.+?\.jpg)" pic_ext'
12 imgre = re.compile(reg) #上一句 正则表达式匹配 圆括号()代表我们想要(图片的地址),.+? 其中问号是懒惰模式,整个.+?匹配任何字符但尽可能地少,因为懒惰麻
13 imglist = re.findall(imgre,html) #上一句 进行预编译,反正就是要比较所以先编译一下,方便省时 这句返回正则表达式匹配的列表
14 x = 0
15 for imgurl in imglist:
16 urllib.urlretrieve(imgurl,'%s.jpg' % x) #存入和这个代码程序相同的目录下
17 x+=1
18 return imglist
19
20
21
22
23 html = getHtml("http://tieba.baidu.com/p/2460150866")
24
25 print getImg(html)
这几天一直想换电脑,买苹果,无奈钱包空空,怎么能用下班时间转到买苹果顶配的钱,这是一个问题