首页 » 技术分享 » 豆瓣租房爬虫

豆瓣租房爬虫

 

初试爬虫,学习python也有一段时间了,想自己做个小项目实战锻炼一下,并在实战中总结。

之前在豆瓣小组找房子,由于标题信息很乱,而且要经常翻页,十分不方便,所以想做个豆瓣小组关键信息提取的程序

方便以后找房子。

所以第一步自然是先爬取信息啦。

爬取一个网页需要几步,拢共分三步:

第一步,import 一些需要的库

第二步,复制爬取的连接

第三步,稍微补充一下细节,完成!

from bs4 import BeautifulSoup           #网页解析库,用于解析网页
import requests                         #网页请求库,联网发送网页请求
import time                             #定时库,用于延时
import pandas                           #数据分析库,用于储存爬取数据

#url = 'https://www.douban.com/group/106955/discussion?start='               #市小组
#url = 'https://www.douban.com/group/nanshanzufang/discussion?start='        #南山小组
#url = 'https://www.douban.com/group/futianzufang/discussion?start='         #福田小组
url = 'https://www.douban.com/group/baoanzufang/discussion?start='           #宝安小组


def get_page(url,data=None):                   #定义单页爬取函数

    wb_data = requests.get(url)                 #发送网页请求
    soup = BeautifulSoup(wb_data.text,'lxml')   #使用beautifulsoup解析网页数据
    titles = soup.select('td.title > a')        #选取要爬取的数据,字符串内为指向内容地址的“唯一部分”
    links = soup.select('td.title > a')

    if data==None:
        for title, link in zip(titles, links):  #把上面爬取的titles和links用zip绑定到一起
            data = {                            #单独提取titles中的title,和links中的link进行循环
                'title': title.get('title'),    #使用get获取网页解析数据中的文本信息
                'link': link.get('href'),
            }
            print(data)                         #打印出这个字典
            save_data.append(data)              #将这个字典添加到save_data列表里

def get_more_pages(start,end,step=1):           #定义多页爬取函数
    for one in range(start,end,step):           #做一个数字循环参数为,起始,结尾,和间隔
        get_page(url+str(one))                  #把连接和结尾的数字添加到一起作为单页链接,如果页码数据不是再结尾,需重编写这一行
        time.sleep(4)                           #获取间隔为4s,避免频繁读取网页资料被屏蔽
                                                                                        



save_data=[]                                    #储存的数据,之前没有储存的数据就为空,若有则添加进去即可
get_more_pages(0,1000,25)                       #观察发现页码变化为每页递增25,刚好为单页内容条数
df = pandas.DataFrame(save_data,columns=['title', 'link']) #把数据修改成DateFrame的格式,并按title,和link的规律排列
df.to_excel('douban_baoan.xlsx')                #输出为该名称的豆瓣xlsx文件
print(df)                                       #顺便输出数据预览一下    



哈哈哈哈,其实还可以详细一点

1、创建一个单页爬取函数

    1.1、发送请求

    1.2、解析网页

    1.3、定位目标内容

    1.4、整理数据

2、创建一个多页爬取函数

    2.1、创建动态页码

    2.2、调用单页爬取函数

    2.3、添加延时时间

3、主函数

    3.1、输入参数

    3.2、把爬取的内容转成DataFrame格式并输出储存

 

啦啦啦啦,这是结果图。

总结一下:整个过程还算比较简单,因为没有爬取图片,也没有遇到被反爬的内容,爬取的网页也是不登录,所以比较顺利。

程序虽然比较简单,但还是有优化的空间,因为在尝试爬取其他小组的时候需要修改的参数也比较多,调用起来也不是很方便,如果优化成一个总的函数那就真的是太方便了。

 

转载自原文链接, 如需删除请联系管理员。

原文链接:豆瓣租房爬虫,转载请注明来源!

0