python第一个爬虫

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.request
import sys,os
import re
def 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 html

def open_file(file_name):
    file = open(file_name,mode='w')
    return file

def  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  imglist


a = 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 中,使用函数式编程。那么到底应该叫面向对象中的方法呢?还是应该叫模块下的函数?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值