Python: 实验爬取虎扑篮球图片

548 查看

编程确实是一个锻炼逻辑思维最有效的工具之一,之前自学Python。总是陷入一个怪圈:看入门数据--一段时间不用忘记了--继续看入门书籍。书是看了很多,编程技术却没有提高。

后来看了一本书,里面有些观点让我茅塞顿开。

做任何事情一定有在短期内简单可行的办法。学习不应该是苦差事,而应该是快乐的,重要的是找到适合自己的学习方法

在汉语中,掌握常见的1500-2000个字就能看懂80%的文字。在编程中,同样有着最核心的关键知识。先用这些关键的知识构建你的知识体系会让你学习效率加速,这是比一开始就钻到各种细枝末节里面更好的学习方式。

学习编程是为了真正做出点东西来。先掌握项目所需的最少必要知识,然后把热情和精力投入到搭建真实项目中,而不是死磕半年的基础知识,直到把所有兴趣都耗竭了也没做出什么像样的东西。

初学者经常会遇到的困惑是,看书上或是听课都懂,但还是不明白要怎么编程。这是因为缺乏足够多的实践。

思维方式改变之后,就是付诸行动了。最近一直在找练手的小项目来磨炼编程技术。首先最让我感兴趣的就是Python爬虫。所以最近一直去爬各种网站的图片。

本文要讲的是如何爬取虎扑篮球图片。

为简单起见,先从单个网页的一个图片说起。后期将进行封装,以提高可用性。

创建文件保存目录

# Create folder for store picture
sub_folder = os.path.join(os.getcwd(), "hupupic")
if not os.path.exists(sub_folder):
    os.mkdir(sub_folder)
# os.chdir(sub_folder)

设置Proxy

# Set proxy
proxy_support = urllib2.ProxyHandler({"http":"http://your_proxy:8080/"})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)

解析目标网页,得到图片真实地址

sample_url = 'http://photo.hupu.com/nba/p29556-1.html'
req = urllib2.Request(url=sample_url)
resp = urllib2.urlopen(req)
html = resp.read()

start = html.find(r'<div class="flTab">')
end = html.find(r'<div class="comMark" style>')
content = html[start:end]
div_pat = r'<div.*?>(.*?)<\/div>'
div_m = re.findall(div_pat, content, re.S|re.M)
# print div_m[2]
link_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", div_m[2])
pic_url = link_list[0]

保存到电脑

file_path = sub_folder
file_name = pic_url.split("/")[-1]
print file_name
fname = file_path + "\\" + file_name
f = urllib2.urlopen(pic_url)
with open(fname, 'wb') as img_file:
    img_file.write(f.read())