PythonTip >> 博文 >> python

Python Crawler

zihua 2014-01-20 23:01:53 点击: 1669 | 收藏


Python Crawler (1)

因为创新杯的缘故,今天要写一个爬虫程序,鄙人是第一次写爬虫程序,就将学习的步骤记录下来,希望能对大家有所帮助

首先我们得了解python中爬虫会用到的技术,和其基本的流程

由于项目的要求较小,这里就没有使用专门的爬虫框架,而是使用了urllib2+regex+beautifulsoup的常见方法

  1. 使用urllib2进行网页抓取,其中就包括模拟登陆,浏览器伪装等方法
  2. 分析html代码,发现你所需内容的位置和规律,比如html中id等内容
  3. 在抓取到的网页中,使用正则表达式查询到具体的位置,从而在html树中找到所需的内容,这里使用beautiful搜谱库
  4. 将获取到的数据保存在数据库或者文本中

今天我们以抓取百度的logo为例,我自己也现学现卖,写个抓取logo的小爬虫程序

1 获取(www.baidu.com)的html文件

这里没有cookie的设置,也没有浏览器的伪装,所以几行代码就已经足够了,使用urlopen方法返回html页面

2 发现html文件规律

分析html代码,发现其中的规律,我们可以发现其logo在一个id属性为’lg‘的p元素里面的img元素,我们可以通过这个发现,使用强大的beautifulsoup库来解析html文件,下图就是该img元素

1
2
3
4
5
6
7
8
9
10
11
12
13
#prase html to find img url (just for www.baidu.com)def getImg(page):
    soup = BeautifulSoup(page)
    imgurl = soup.find(id="lg").img['src']print imgurl
    rcv = urllib2.urlopen(imgurl).read()
    filename = DIR + "logo.gif"
    f = open(filename,'wb')
    f.write(rcv)
    f.close()if __name__ == '__main__':
    getImg(getPage(URL))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'''
Created on 2012-3-9
 
@author: TQS
'''importurllib2importsysimportrefrom ImgDownLoader import ImgDownLoader
from BeautifulSoup import BeautifulSoup
 
URL = r"http://www.baidu.com"
DIR = "D:\\temp\\"# get html from defined urldef getPage(url,data=None):
    page = urllib2.urlopen(URL).read()return page
 
#prase html to find img url (just for www.baidu.com)def getImg(page):
    soup = BeautifulSoup(page)
    imgurl = soup.find(id="lg").img['src']print imgurl
    imgLoader = ImgDownLoader(imgurl,DIR)
    imgLoader.getAndSaveImg();if __name__ == '__main__':
    getImg(getPage(URL))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'''
Created on 2012-3-9
 
@author: TQS
'''importurllib2class ImgDownLoader:
    def__init__(self,url,path):
        self.URL = url
        self.PATH = path
        self.getAndSetPicName()def getAndSetPicName(self):
        self.NAME = self.URL.split("/")[-1]def getAndSaveImg(self):
        rcv = urllib2.urlopen(self.URL).read()file = open(self.PATH + self.NAME,"wb")file.write(rcv)file.close()
原文链接:http://www.wumii.com/item/foGqxUvp

作者:zihua | 分类: python | 标签: python | 阅读: 1669 | 发布于: 2014-01-20 23时 |