python第一个爬虫

来源:互联网 发布:香港大学 知乎 编辑:程序博客网 时间:2024/04/30 00:33

0x01 学了很多还是不会

都说python很好学适合入门,但是我怎么感觉他比JAVA难很多。JAVA学了三个月,完成了毕设(包含socket 通信,多线程,GUI,数据库……),但是同样是学了奖金三个月的python写程序的时候还是不知道该从哪里下手。可能是编译工具的问题?JAVA使用Eclipse的时候敲代码时给出的代码提示和代码补全能够让你几乎不需要记什么东西去敲代码。但是python的pycharm却不能。其动态语言的特性让编译器很难办,因为当传入参数的时候编译工具无法知道传进来的参数是整型?是数值型?亦或者是其他自定义类型。结果导致无法根据参数的类型提示相关的方法与成员变量。可能这就是我敲代码费劲的原因,对python的库了解太少,没有补全不会写程序。

0x02 动手去干

在看过《python 学习手册》和廖雪峰(www.liaoxuefeng.com)的python教程后,决定不再看教程了,动手做。按照中国制造的风格依然是半抄袭半创造的写。都说用python写爬虫方便,小试一下写了一个。参照了一个现成的简单爬虫(http://www.cnblogs.com/fnng/p/3576154.html)和python Document ,制作了爬http://imgur.com首页图片的简单爬虫,用到了正则表达式和file IO。

0x03 代码

__author__ = 'user'import urllib.requestimport sys,osimport redef get_html(url):    auth_handler = urllib.request.HTTPBasicAuthHandler()    auth_handler.add_password(                              realm=None,                              uri='http.html://proxy.neusoft.com:8080',                              user='',                              passwd='')    opener = urllib.request.build_opener(auth_handler)    # urllib.request.install_opener(opener)    page = urllib.request.urlopen(url)    html = page.read()    return htmldef open_file(file_name):    file = open(file_name,mode='w')    return filedef  get_img(html):    img_rex = r'<img\salt=\"\"\ssrc=\"//(.*)\"\s'# <img alt="" src="//i.imgur.com/DloOEuSb.jpg" original-title="">    img_cre = re.compile(img_rex)    imglist = re.findall(img_cre,html)    x = 0    for img in imglist:        urllib.request.urlretrieve(r'http://'+img,'%s.jpg' % x)        x+=1    return  imglista = input()html = get_html(a)html_file = open_file('http.html')img_file = open('imglist','w')for line in html.decode('utf8'):    html_file.write(line)for line in get_img(html.decode('utf8')):    img_file.write(line)    img_file.write('\n')print(html)print(img_file)
以上为这个简单的爬虫的源代码,基本骨架是借鉴来的,打开文件、读取网页、正则表达式匹配、写入文件。大概就是这几步,其中python的正则表达式也是需要编译的,使用re module 的compile 方法。使用‘()’ 来进行已匹配的字符串的记录,最后使用urllib.request的urlretrive方法根据url来下载图片。

0x04 疑问

在python 中,使用函数式编程。那么到底应该叫面向对象中的方法呢?还是应该叫模块下的函数?

0 0
原创粉丝点击