前言

  机缘巧合,最近在学习机器学习实战,

  本来要用python来做实验和开发环境

  得到一个需求,要爬取大众点评中的一些商户信息,

  于是开启了我的第一个爬虫的编写,里面有好多心酸,主要是第一次。

  我的文章有幸被你看到的话,如果你也是个初学者,希望能让你也学习到一些东西,下面是干货。

需求:

python爬虫__第一个爬虫程序

 

python爬虫__第一个爬虫程序

环境:

  1、windows 7 +python2.7.3+BeautifulSoup包

   2、BeautifulSoup是用的最新版,4.x的,在bs4的包中,直接用pip install BeautifulSoup即可安装,前提你得有pip,或者easy_install也可以

   3、这里用到BeautifulSoup,主要是获取爬下来的html文档树,然后提供了一套获取网页数据内容的API,如指定标签属性或内容等。

   4、BeautifulSoup这个东西蛮好用的,但是涉及到一些特别的需求,还是要正则出马,正则我也不熟,有时间还是要专门学一下,共勉。

源码:

 1 # -*- coding: utf-8 -*-
 2 import urllib2
 3 import re
 4 from bs4 import BeautifulSoup
 5 
 6 base_url = 'http://www.dianping.com'
 7 url = 'http://www.dianping.com/search/category/1/10/g101r801'
 8 html = urllib2.urlopen(url)
 9 soup = BeautifulSoup(html,"html.parser")
10 flag = 0
11 
12 while(url!=None):    
13     html = urllib2.urlopen(url)
14     soup = BeautifulSoup(html,"html.parser")
15 
16     #餐厅总数
17     Sum = soup.find(attrs={'class':'num'}).string
18     #餐厅名称
19     names = soup.find_all('a',attrs={'data-hippo-type':'shop'})
20     #星级
21     levels = soup.find_all(['span'],attrs={'class':re.compile(r"sml-rank-stars(\s\w+)?")})
22     #评论数
23     nums = soup.find_all('a',attrs={'class':'review-num'})
24     #人均消费
25     prices = soup.find_all('a',attrs={'class':'mean-price'})
26     #菜系区域
27     caixis = soup.select('div[class="tag-addr"] a')
28     #详细地址
29     addrs = soup.find_all('span',attrs={'class':'addr'})
30     #口味、环境、服务评分
31     comments = soup.find_all('span',attrs={'class':'comment-list'})
32     if(flag==0):
33         info = 'Sum: '+ str(Sum).replace('(','').replace(')','') + '\n' + '#########################################'
34     
35     for (a,b,c,d,e,f,g) in zip(names,levels,nums,prices,caixis,addrs,comments):
36         info = info +'\n'+'name: '+ str(a.text.encode('gb18030').replace(' ','')) 
37         info = info +'\n'+'level: '+ str(b.get('title').encode('gb18030').replace(' ','')) 
38         info = info +'\n'+'num: '+ str(c.text.encode('gb18030').replace(' ',''))
39         info = info +'\n'+'price: '+ str(d.text.encode('gb18030').replace(' ',''))
40         info = info +'\n'+'caixi: '+ str(e.text.encode('gb18030').replace(' ',''))
41         info = info +'\n'+'addr: '+ str(f.text.encode('gb18030').replace(' ',''))
42         info = info +'\n'+'comment: '+ str(g.text.encode('gb18030').replace(' ',''))
43         info += '\n'+'#########################################'
44         
45     file = open('result.txt','a')
46     file = file.write(info)
47 
48     info = ''
49     flag = 1
50     
51     url = soup.find('a',attrs={'class':'next','title':'下一页'})
52     if(url!=None):
53         url = url.get('href')
54         url = base_url+str(url)
55 
56 print("end")
test.py

相关文章: