网络爬虫-使用Python抓取网页数据

 

搬自大神boyXiong的干货!

闲来无事,看看了Python,发现这东西挺爽的,废话少说,就是干

  • 准备搭建环境 
    • 因为是MAC电脑,所以自动安装了Python 2.7的版本
    • 添加一个 库 Beautiful Soup ,方法这里说两种 
      • 1.在终端输入 pip install BeautifulSoup
      • 2.手动下载包后,终端切换到 解压的文件夹,输入 sudo python setup.py install 下载地址BeautifulSoup
  • 开始写代码吧 
    • 先找一个想要抓取东西的网站,这里我就随便找一个吧 地址是:http://movie.douban.com/chart
    • 好了在终端输入 vim 我知道这个东西,对于新手来说,就是一个挑战,这里我也建议使用轻量的Sublime
    • 代码如下 (注意python是严格的缩进,以下代码要顶格写)
1 #-*- coding:utf-8 -*-
2 import urllib2
3 import urllib
4 html=urllib2.urlopen("http://movie.douban.com/chart").read()
5 print html
  • 输出的结果就是一个HTML的网页,这里我就看到自己想要抓取的图片和图片名的文字片段
<a class="nbg" href="http://movie.douban.com/subject/24879839/"  title="道士下山">
           <img src="http://img3.douban.com/view/movie_poster_cover/ipst/public/p2251450614.jpg" alt="道士下山" class=""/>
</a>
  • 分析我们想要的,一个是图片的名称,一个是图片的链接地址,直接上Python代码
复制代码
 1 #-*- coding:utf-8 -*-
 2 import urllib2
 3 from bs4 import BeautifulSoup
 4 
 5 import sys  
 6 reload(sys)  
 7 sys.setdefaultencoding('utf8')
 8 
 9 # 函数
10 def  printPlistCode():
11     #1.得到这个网页的 html 代码 #
12     html = urllib2.urlopen("http://movie.douban.com/chart").read()
13 
14     #2.转换 一种格式,方便查找
15     soup = BeautifulSoup(html)
16     #3.  得到 找到的所有 包含 a 属性是class = nbg 的代码块,数组
17     liResutl = soup.findAll('a', attrs = {"class" : "nbg"})
18     #4.用于拼接每个字典的字符串
19     tmpDictM = ''
20 
21     #5. 遍历这个代码块  数组
22     for li in liResutl:
23 
24         #5.1 找到 img 标签的代码块 数组
25         imageEntityArray = li.findAll('img')
26 
27         #5.2 得到每个image 标签
28         for image in imageEntityArray:
29             #5.3 得到src 这个属性的 value  后面也一样 类似 key value
30             link = image.get('src')
31             imageName = image.get('alt')
32             #拼接 由于 py中 {} 是一种数据处理格式,类似占位符
33             tmpDict = '''@{0}@"name" : @"{1}", @"imageUrl" : @"{2}"{3},'''
34 
35             tmpDict =  tmpDict.format('{',imageName,link,'}')
36 
37             tmpDictM = tmpDictM + tmpDict
38 
39     #6.去掉最后一个 , 
40     tmpDictM = tmpDictM[0:len(tmpDictM) - 1].decode('utf8')
41 
42     #7 拼接全部
43     restultStr = '@[{0}];'.format(tmpDictM)
44 
45     print restultStr
46 
47 
48 if __name__ == '__main__':
49     printPlistCode()
复制代码
  • 输出结果就是Objective-C的 数组
复制代码
@[@{@"name" : @"进击的巨人真人版:前篇", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2251690571.jpg"},@{@"name" : @"花与爱丽丝杀人事件", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2222398443.jpg"},@{@"name" : @"小黄人大眼萌", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2258235689.jpg"},@{@"name" : @"小森林 冬春篇", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2215147728.jpg"},@{@"name" : @"道士下山", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2251450614.jpg"},@{@"name" : @"深夜食堂 电影版", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2205014862.jpg"},@{@"name" : @"小男孩", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2230105606.jpg"},@{@"name" : @"头脑特工队", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2231021196.jpg"},@{@"name" : @"百元之恋", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2205471169.jpg"},@{@"name" : @"杀破狼2", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2246885606.jpg"}];
复制代码

  • 使用Xcode 写到Plist中去
复制代码
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {


    NSArray *plistArray = @[@{@"name" : @"进击的巨人真人版:前篇", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2251690571.jpg"},@{@"name" : @"花与爱丽丝杀人事件", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2222398443.jpg"},@{@"name" : @"小黄人大眼萌", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2258235689.jpg"},@{@"name" : @"小森林 冬春篇", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2215147728.jpg"},@{@"name" : @"道士下山", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2251450614.jpg"},@{@"name" : @"深夜食堂 电影版", @"imageUrl" : @"http://img3.douban.com/view/movie_poster_cover/ipst/public/p2205014862.jpg"},@{@"name" : @"小男孩", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2230105606.jpg"},@{@"name" : @"头脑特工队", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2231021196.jpg"},@{@"name" : @"百元之恋", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2205471169.jpg"},@{@"name" : @"杀破狼2", @"imageUrl" : @"http://img4.douban.com/view/movie_poster_cover/ipst/public/p2246885606.jpg"}];
    //路径可以自己选择
    [plistArray writeToFile:@"/Users/xxx/Desktop/test/movie.plist" atomically:YES];

    return 0;
}
复制代码

  • 到这里,就可以看到plist 文件可以用于测试了 
    这里写图片描述
  • 如果想要复制粘贴这里面的代码,那就选择Sublime编辑器
  • (欢迎转帖,请附上源地址boyXiong)
本博文由博主根据资料或其他优秀博文整理而成,转载请注明出处,谢谢!
原文地址:https://www.cnblogs.com/Apolla/p/4756109.html