爬取链家网站的北京租房信息

本来准备这个暑假好好复习,但学校安排暑期实践,既然学校安排这个,而且我自己也觉得需要提高一下自己的能力,所以静下心来做点事吧。我们要做到项目是分析北京地区的租房的信息分析。

我们需要做的是爬取链家网站上北京地区的租房信息。链家作为国内比较出名的房地产中介公司,发布的房地产租房信息还是不叫权威的。

我们需要做的分为两步:找到各个租房页面的链接,爬取每个租房页面的数据。

第一步找到每个租房页面的链接,北京地区的租房页面的初始链接为https://bj.lianjia.com/zufang/pg1/,下一页的地址就是把后面的pg1改成pg2,以此后推,一共有100个页面。

具体实现代码如下:

    for i in range(1,101):
        firsturl=r"https://bj.lianjia.com/zufang/pg%d/"%i
#        list.append(firsturl)
        title,l=frist(firsturl)
        

我们需要在这个页面上爬取每个具体房屋页面的URL地址。

具体实现代码如下:

def frist(firsturl):
    time.sleep(3)
    title=[]
    l=[]
    html=requests.get(firsturl)
    #html可能乱码,soup会转码
    soup = BeautifulSoup(html.content)
    for link in soup.find_all('h2'):
        if len(str(link))>84:
    #        href=link.get('href')
            li=link.a['href']
            t= link.a["title"]
            title.append(t)
            l.append(li)
    return title,l

第二步在每个租房页面上提取自己想要的信息,我们已知每个租房页面上的URL,所以我们设计一个函数可以根据一个URL可以提取我们想要的数据。具体代码实现如下:

def single(url):

#    send_headers={"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
#                  "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
#                  "Connection":"keep-alive",
#                  "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"}
#    
    html=requests.get(url)
    soup=BeautifulSoup(html.content)
    soup1=soup.find(class_='zf-room')#tag类型
    price=soup.find_all(class_='total')[0].string
    area=soup.find_all(class_='lf')[0].get_text()[3:8:]
    housetype=soup.find_all(class_='lf')[1].get_text()
    floor=soup.find_all(class_='lf')[2].get_text()
    toward=soup.find_all(class_='lf')[3].get_text()
    subline=soup1.find_all("p")[4].get_text()
    local=soup1.find_all("p")[6].get_text()
    print(price,area,housetype,floor,toward,subline,local)
#    for i in soup.find_all("span"):
#        print (i)
#        price.append(i)
    return price,area,housetype,floor,toward,subline,local

我们现在已经可以将这两部分合并在一起就好啦。

注:一、因为我们如果很高频率的登录网站,网站会把我们给断开,所以我们选择time.sleep()来减轻访问时间

      二、我们第一步得到的网址我们可以先保存在本地,然后我们可以读取文件,这样可以避免多次访问。

      三、当我们爬取一半时忽然无法执行,可以将已经执行好的数据下来,再将代码从断开的地方重新执行,这样可以节省很多时间。

代码传送门

猜你喜欢

转载自blog.csdn.net/ssssdbucdbod/article/details/80903050