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")
结果:
1 56 2 ######################################### 3 海神诺富特大酒店海神宫中餐厅 4 -准四星商户- 5 147 6 条点评- 7 人均 8 ¥135 9 -本帮江浙菜-浦东大道728号海神诺富特大酒店4楼- 10 口味7.3 11 环境7.6 12 服务7.5 13 14 ######################################### 15 浦江六号 16 -准五星商户- 17 90 18 条点评- 19 人均 20 ¥679 21 -陆家嘴-陆家嘴浦明路1888号6号楼- 22 口味8.5 23 环境9.1 24 服务8.9 25 26 ######################################### 27 濱江22號 28 -五星商户- 29 40 30 条点评- 31 人均 32 ¥1000 33 -本帮江浙菜-浦明路1888号黄浦江畔22号楼独栋- 34 口味8.9 35 环境8.9 36 服务8.9 37 38 ######################################### 39 上海小南国(正大广场店) 40 -四星商户- 41 12086 42 条点评- 43 人均 44 ¥201 45 -陆家嘴-陆家嘴西路168号正大广场9楼- 46 口味7.5 47 环境7.8 48 服务7.0 49 50 ######################################### 51 廊亦舫酒楼(正大店) 52 -四星商户- 53 4658 54 条点评- 55 人均 56 ¥156 57 -本帮江浙菜-陆家嘴西路168号正大广场5楼23号铺- 58 口味7.3 59 环境7.6 60 服务6.9 61 62 ######################################### 63 金牌外婆家(上海国金中心店) 64 -四星商户- 65 5400 66 条点评- 67 人均 68 ¥88 69 -陆家嘴-世纪大道8号上海国金中心内LG2层54号- 70 口味7.7 71 环境7.9 72 服务7.8 73 74 ######################################### 75 张生记(正大广场店) 76 -四星商户- 77 5272 78 条点评- 79 人均 80 ¥159 81 -本帮江浙菜-陆家嘴西路168号正大广场6楼- 82 口味7.6 83 环境8.1 84 服务7.0 85 86 ######################################### 87 春在 88 -准五星商户- 89 1214 90 条点评- 91 人均 92 ¥153 93 -陆家嘴-富城路182号- 94 口味8.7 95 环境8.6 96 服务8.1 97 98 ######################################### 99 夏小馆(陆家嘴店) 100 -四星商户- 101 3161 102 条点评- 103 人均 104 ¥86 105 -本帮江浙菜-陆家嘴街道正大广场8楼23号铺- 106 口味7.6 107 环境7.8 108 服务7.8 109 110 ######################################### 111 孔乙己尚宴 112 -五星商户- 113 645 114 条点评- 115 人均 116 ¥446 117 -陆家嘴-滨江大道2100- 118 口味9.1 119 环境9.2 120 服务9.0 121 122 ######################################### 123 桂花楼 124 -准四星商户- 125 844 126 条点评- 127 人均 128 ¥298 129 -本帮江浙菜-富城路33号香格里拉大酒店浦江楼1楼- 130 口味7.2 131 环境8.0 132 服务7.3 133 134 ######################################### 135 爱玲EILEEN(环球金融中心店) 136 -准五星商户- 137 862 138 条点评- 139 人均 140 ¥307 141 -陆家嘴-世纪大道100号环球金融中心3楼- 142 口味8.7 143 环境9.1 144 服务9.0 145 146 ######################################### 147 上海小南国(国会店) 148 -四星商户- 149 842 150 条点评- 151 人均 152 ¥223 153 -本帮江浙菜-滨江大道2727号东方滨江大酒店7楼- 154 口味8.0 155 环境8.7 156 服务7.8 157 158 ######################################### 159 成隆行蟹王府(金茂店) 160 -五星商户- 161 2091 162 条点评- 163 人均 164 ¥331 165 -陆家嘴-世纪大道88号裙房金茂时尚生活馆6楼- 166 口味9.1 167 环境8.7 168 服务8.9 169 170 ######################################### 171 老上海8号餐厅 172 -准四星商户- 173 387 174 条点评- 175 人均 176 ¥185 177 -本帮江浙菜-世纪大道1号东方明珠8号门国际新闻中心1楼- 178 口味7.3 179 环境8.2 180 服务7.2 181 182 ######################################### 183 苏浙总会(国金中心店) 184 -准五星商户- 185 1014 186 条点评- 187 人均 188 ¥491 189 -本帮江浙菜-世纪大道8号国金中心4楼L4-13- 190 口味8.5 191 环境9.0 192 服务8.6 193 194 ######################################### 195 雍颐庭 196 -准五星商户- 197 460 198 条点评- 199 人均 200 ¥653 201 -陆家嘴-浦东南路111号文华东方酒店LG层- 202 口味8.6 203 环境9.1 204 服务9.1 205 206 ######################################### 207 汇尊滨江酒店 208 -准四星商户- 209 525 210 条点评- 211 人均 212 ¥225 213 -本帮江浙菜-滨江大道3528号- 214 口味6.9 215 环境7.4 216 服务6.9 217 218 ######################################### 219 上海小南国(国发店) 220 -四星商户- 221 1981 222 条点评- 223 人均 224 ¥180 225 -陆家嘴-浦东南路500号国家开发银行4楼- 226 口味7.6 227 环境7.7 228 服务7.1 229 230 ######################################### 231 汉宫 232 -准四星商户- 233 1430 234 条点评- 235 人均 236 ¥122 237 -本帮江浙菜-浦东南路360号新上海国际大厦48楼- 238 口味6.5 239 环境6.5 240 服务6.1 241 242 ######################################### 243 上海金茂俱乐部上海餐厅 244 -准五星商户- 245 640 246 条点评- 247 人均 248 ¥510 249 -陆家嘴-世纪大道88号金茂君悦大酒店86楼- 250 口味7.7 251 环境9.0 252 服务8.4 253 254 ######################################### 255 四季酒店尚席 256 -五星商户- 257 414 258 条点评- 259 人均 260 ¥467 261 -本帮江浙菜-世纪大道210号酒店2楼- 262 口味8.9 263 环境9.1 264 服务8.5 265 266 ######################################### 267 乐新皇朝(国金中心店) 268 -准五星商户- 269 5274 270 条点评- 271 人均 272 ¥111 273 -陆家嘴-世纪大道8号国金中心二期L3-36- 274 口味8.7 275 环境8.6 276 服务8.7 277 278 ######################################### 279 老弄堂上海菜 280 -准四星商户- 281 6 282 条点评- 283 人均 284 - 285 -本帮江浙菜-银城西路- 286 口味7.1 287 环境7.1 288 服务7.1 289 290 ######################################### 291 克拉哈勃游艇俱乐部 292 -四星商户- 293 23 294 条点评- 295 人均 296 ¥376 297 -陆家嘴-滨江大道4775号- 298 口味7.3 299 环境8.1 300 服务7.6 301 302 ######################################### 303 上海本帮菜 304 -准四星商户- 305 9 306 条点评- 307 人均 308 - 309 -本帮江浙菜-浦东大道10号- 310 口味7.0 311 环境6.9 312 服务7.0 313 314 ######################################### 315 国泰君安食堂 316 -四星商户- 317 14 318 条点评- 319 人均 320 - 321 -陆家嘴-银城中路168号上海银行大厦B1楼- 322 口味7.7 323 环境7.7 324 服务7.7 325 326 ######################################### 327 海上盛宴 328 -准四星商户- 329 71 330 条点评- 331 人均 332 ¥71 333 -粤菜-浦东大道281号东海宾馆2楼- 334 口味7.1 335 环境7.1 336 服务7.1 337 338 ######################################### 339 彭氏农家大院(龙虾烧烤) 340 -准四星商户- 341 239 342 条点评- 343 人均 344 ¥76 345 -陆家嘴-浦电路136号- 346 口味7.6 347 环境7.2 348 服务7.0 349 350 ######################################### 351 汉宫酒家(银城中路店) 352 -准四星商户- 353 33 354 条点评- 355 人均 356 ¥27 357 -本帮江浙菜-银城中路200号中银大厦6楼- 358 口味7.4 359 环境7.3 360 服务6.7 361 362 ######################################### 363 周董好料 364 -三星商户- 365 11 366 条点评- 367 人均 368 ¥32 369 -本帮江浙菜-世纪大道100号环球金融中心B2- 370 口味6.4 371 环境6.7 372 服务6.7 373 374 ######################################### 375 银行家俱乐部 376 -准四星商户- 377 86 378 条点评- 379 人均 380 ¥269 381 -陆家嘴-银城中路200号中银大厦银行家俱乐部52楼- 382 口味6.5 383 环境7.2 384 服务6.7 385 386 ######################################### 387 香格格(栖霞路店) 388 -准四星商户- 389 153 390 条点评- 391 人均 392 ¥34 393 -本帮江浙菜-栖霞路9号- 394 口味6.4 395 环境6.0 396 服务6.2 397 398 ######################################### 399 Freshmind 400 -准四星商户- 401 15 402 条点评- 403 人均 404 ¥17 405 -陆家嘴-杨高南路759号2层04A单元- 406 口味7.1 407 环境7.6 408 服务7.3 409 410 ######################################### 411 鲜美100 412 -准四星商户- 413 8 414 条点评- 415 人均 416 - 417 -本帮江浙菜-世纪大道8号国金中心商场- 418 口味7.0 419 环境6.8 420 服务7.0 421 422 ######################################### 423 有滋有味家常菜 424 -准四星商户- 425 4 426 条点评- 427 人均 428 - 429 -陆家嘴-崂山二村31号- 430 口味7.3 431 环境7.3 432 服务7.3 433 434 ######################################### 435 东方滨江大酒店宴会厅 436 -准四星商户- 437 22 438 条点评- 439 人均 440 - 441 -本帮江浙菜-滨江大道2727号东方滨江大酒店内- 442 口味7.0 443 环境7.0 444 服务7.1 445 446 ######################################### 447 徽姑娘乡土菜馆 448 -准四星商户- 449 68 450 条点评- 451 人均 452 ¥45 453 -陆家嘴-栖霞路3号- 454 口味6.4 455 环境6.5 456 服务6.4 457 458 ######################################### 459 苏鸿兴汤包馆(浦东大道店) 460 -三星商户- 461 24 462 条点评- 463 人均 464 ¥15 465 -本帮江浙菜-浦东大道136号- 466 口味6.4 467 环境6.5 468 服务6.5 469 470 ######################################### 471 汇丰银行食堂 472 -三星商户- 473 3 474 条点评- 475 人均 476 ¥13 477 -陆家嘴-陆家嘴环路1000号汇丰大厦B1楼- 478 口味6.9 479 环境6.7 480 服务6.7 481 482 ######################################### 483 阳澄湖大闸蟹 484 -准四星商户- 485 2 486 条点评- 487 人均 488 - 489 -本帮江浙菜-世纪大道100号上海环球金融中心B2F- 490 口味6.4 491 环境6.6 492 服务6.4 493 494 ######################################### 495 农家土菜馆 496 -三星商户- 497 8 498 条点评- 499 人均 500 - 501 -本帮江浙菜-栖霞路129号- 502 口味7.1 503 环境6.8 504 服务6.8 505 506 ######################################### 507 恋草堂 508 -准四星商户- 509 1 510 条点评- 511 人均 512 ¥22 513 -陆家嘴-浦东大道287号- 514 口味6.8 515 环境6.8 516 服务6.8 517 518 ######################################### 519 食尚居 520 -三星商户- 521 10 522 条点评- 523 人均 524 - 525 -本帮江浙菜-浦东大道307号- 526 口味6.5 527 环境6.5 528 服务6.5 529 530 ######################################### 531 金世尊大闸蟹(陆家嘴店) 532 -三星商户- 533 3 534 条点评- 535 人均 536 - 537 -陆家嘴-松林路35号- 538 口味6.9 539 环境6.8 540 服务6.9 541 542 ######################################### 543 王记小炒 544 -准四星商户- 545 17 546 条点评- 547 人均 548 - 549 -本帮江浙菜-招远路27号- 550 口味7.1 551 环境6.9 552 服务6.7 553 554 ######################################### 555 露天海派时尚餐厅(二分店) 556 -准四星商户- 557 2 558 条点评- 559 人均 560 - 561 -陆家嘴-南泉北路35号甲- 562 口味6.9 563 环境6.9 564 服务6.9 565 566 #########################################
总结:
这个例子虽然很简单,但是作为我第一个爬虫程序,还是耗费了我一晚上,包括配置工具,了解一个新的包,以及在安装环境等等一系列问题,弄完的时候我也是已经筋疲力尽了,虽说完成了爬取的功能,但是还是有些问题需要后续再考虑的,还有一个问题是菜系和区域这两个东西有点乱,这是目前没有解决的,因为正则知识太差了,这两个信息的话很难区分开,后面再看看能不能解决吧。
总的来说,收获还是有的,至少知道了如何在没有预先知识的情况下,从零开始去找资料实现一个不熟悉的东西。
爬虫这东西应用也很广的,值得学一下,期望在下一份工作中用到这些知识吧。