Chinaunix首页 | 论坛 | 博客
  • 博客访问: 462465
  • 博文数量: 137
  • 博客积分: 3874
  • 博客等级: 中校
  • 技术积分: 1475
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-05 10:50
文章分类

全部博文(137)

文章存档

2011年(37)

2010年(100)

分类: LINUX

2010-09-20 02:45:45

昨天朋友让我帮忙从搜房网的搜索结果里面,把所有的住房和价格提取出来,我说试一下。正好用python练练。逻辑很简单,但是由于不熟,还是敲了好久,还好,最后搞定了,不过有几个小bug~但是应该能用了。。。
BeautifulSoup用起来很方便  哈哈


import sys
from BeautifulSoup import BeautifulSoup
import re
import urllib2
import csv


def get_name_price(url):
    print(url)
    response = urllib2.urlopen(url)
    print("get response")
    html=response.read()
    soup = BeautifulSoup(html,fromEncoding="gbk")
    print("soup complete")
    name=soup.findAll("div",{"class":"name"})
    print("get name")
    price=soup.findAll("span",{"class":"price_type"})
    print("get price")
    next=soup.findAll("div",{"class":"searchListPage"})
    l=len(next[0].contents)
    
    b=u'\u5c3e\u9875'
    lasturl=""
    for i in range(1,l,2):
        if next[0].contents[i]['class']==u's4':
            if next[0].contents[i].contents[0].string==b:
                lasturl=next[0].contents[i].contents[0]["href"]
                break;
            
    if(lasturl==""):
        lasturl=url
    return (name,price,lasturl)

if len(sys.argv) < 2:
    url="%CE%AB%B7%BB______%D7%A1%D5%AC___________1.htm"
else:
    url=sys.argv[1]


l=len(url)
ptn=url[0:l-5]
(name,price,lasturl)=get_name_price(url)
if url!=lasturl:
        lasturl=""+lasturl
allname=name
allprice=price
lptn=len(ptn)
cnt=int(lasturl[lptn:len(lasturl)-4])

f=open("house_price.xls","w")

alllen=len(name)
for i in range(0,alllen):
    print name[i].contents[1].string,price[i].string,name[i].contents[1]['href']
    f.write(name[i].contents[1].string.encode("gbk"))
    f.write(" ")
    f.write(price[i].string.encode("gbk"))
    f.write(" ")
    f.write(name[i].contents[1]['href']+"\r\n")
    f.flush()
    print '-------------------------------'

for i in range(2,cnt+1):
    url=ptn+str(i)+".htm"
    (name,price,tem)=get_name_price(url)
    allname+=name;
    allprice+=price
    alllen=len(name)
    for i in range(0,alllen):
        print name[i].contents[1].string,price[i].string,name[i].contents[1]['href']
        f.write(name[i].contents[1].string.encode("gbk"))
        f.write(" ")
        f.write(price[i].string.encode("gbk"))
        f.write(" ")
        f.write(name[i].contents[1]['href']+"\r\n")
        f.flush();
        print '-------------------------------'


阅读(886) | 评论(2) | 转发(0) |
0

上一篇:emacs快捷键

下一篇:python插件之beautifulsoup

给主人留下些什么吧!~~

chinaunix网友2010-09-21 15:19:04

看到你这篇文章,我决定要要买一本python的书了!必须的!

chinaunix网友2010-09-21 08:10:58

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com