简单的爬取某租房网站租房信息并存入MySQL数据库
这是我第一个爬虫项目,因为我有一些其他语言的基础,所以在入坑python十来天后终于完成了一个小项目,其间的辛酸不足为外人道也...说了这么多,那就让我们开始吧。
1.先看看使用的库:
[code]import requests import pymysql from bs4 import BeautifulSoup import datetime import re
requests库用于处理url,并将其转化为文本格式,用来分析;
BeautifulSoup库用于将处理的文本格式化为html的形式,可以方便的使用CSS来查找链接,寻找相似性,并且其中还用到过re库,使用正则表达式与前者的寻找链接速度做过比对,但是正则表达式直接分析文本不经BeautifulSoup转化虽然快,但是在使用的过程中发现会有很多重复;
datetime库用来计算程序运行时间;
pymysql用来对MySQL数据库进行操作,将爬取的数据全部存入数据库中,而且python3貌似不支持mysqldb;
2.函数(方法基本都写成了函数,避免代码重复)
下面代码中,使用beautifulSoup,由于html5lib的兼容性最好,所以我使用的是html5lib,也有其他的,如lxml,大家也可以尝试一下:
[code]# # 直接获取url的text形式,用正则表达式验证看是否能够加速 # def get_text(page_url): # response = requests.get(page_url) # response.encoding = 'utf-8' # return response.text # 获取url下的页面内容,返回soup对象 def get_htmtext(page_url): soup = BeautifulSoup(requests.get(page_url).text,'html5lib') return soup # 封装成函数,作用是获取列表页下面的所有租房页面链接,生成一个链接列表 def get_links(page_url): soup = get_htmtext(page_url) links_div = soup.find_all('div',class_="pic-panel") links = [div.a.get('href') for div in links_div] return links
获取租房信息:
[code]# 获取房屋信息 def get_info(link_url): soup = get_htmtext(link_url) price = soup.find('span',class_="total").text #价格 unit = soup.find('span',class_="unit").text.strip() #单位,并去掉特殊符号 house_info = soup.find_all('p') #获取租房信息 area = house_info[0].text[3:] layout = house_info[1].text[5:] floor = house_info[2].text[3:] direction = house_info[3].text[5:] subway = house_info[4].text[3:] community = house_info[5].text[3:].strip() location = house_info[6].text[3:] create_time = house_info[7].text[3:] agent_name = soup.find('a',class_="name LOGCLICK").text house_num = soup.find('span',class_="houseNum").text[5:] # 生成字典 info = { 'house_num': house_num, 'price': price, 'unit': unit, 'area': area, 'layout': layout, 'floor': floor, 'direction': direction, 'subway': subway, 'community': community, 'location': location, 'create_time': create_time, 'agent_name': agent_name } return info
设置登录数据库的参数以及登入函数:
[code]# 数据库登录参数设置 DATABASE ={ 'host': 'localhost', #如果是远程数据库,此处为远程服务器的IP地址 'database': 'test', 'user': 'root', 'password': '******' } # 登入数据库 def load_db(setting): return pymysql.Connect(**setting)
将数据存入数据库的插入函数:
[code]# 插入数据库函数 def insert_sql(db,house_info): dic = house_info ls = list(dic) table_name = 'user' data_type = { type("str"): '"%({})s"', type(0): '%({})s', type(0.1): '%({})s', type(None): 'null' } # sql生成语句 sentence = 'insert ignore into %s('%table_name+','.join(ls)+') values(' + ','.join([data_type[type(dic[i])].format(i) for i in ls]) + ');' sql = sentence % dic cursor = db.cursor() try: cursor.execute(sql) db.commit() except Exception as e: print(e)
插入函数作为数据库存储的核心,其中的SQL生成语句是重中之重,可以一整行一整行的将数据存入,ignore避免重复存储,使用游标执行SQL语句,然后上传
最后进入正题,调用函数完成爬取,存储操作:
[code]# 根据规律获取所有页面链接 def get_allpages(): links = [] for i in range(2,11): links.append('https://bj.lianjia.com/zufang/pg'+str(i)+'/') return links first_url = 'https://bj.lianjia.com/zufang/' start_time = datetime.datetime.now() # 程序开始时间 # 使用BeautifulSoup方法,速度较慢但基本不会重复 links = get_links(first_url) for i in get_allpages(): for j in get_links(i): links.append(j) # # 使用正则表达式很快,但有许多重复 # links = get_links(first_url) # for i in get_allpages(): # eve_links = re.findall(r'href="(https://bj.lianjia.com/zufang/\w+\.html)"',get_text(i)) # for j in eve_links: # links.append(j) db = load_db(DATABASE) for i in range(len(links)): insert_sql(db,get_info(links[i])) end_time = datetime.datetime.now() #程序结束时间 print((end_time-start_time).seconds)
因为该网站每页的链接特别明显,所以直接写了一个get_allpages函数,大致思路就是从首页的一个url地址,不断地将其他页面的链接分析读取出来,所以很大一部分是找出链接的特征,而且在爬取时能明显的感觉速度很慢,300个链接大概需要五分钟,可能是方法的问题,而且只是单纯的入库,并没有进行数据分析,所以还有很多不足,下次应该会发一篇分析这批数据的文章,并且采用其他的方法爬取数据。人生苦短,我用python!感谢大家的阅读!
阅读更多
- requests简单爬取安居网租房信息
- 使用简单的python语句编写爬虫 定时拿取信息并存入txt
- scrapy框架爬取知乎110w用户信息,并存入mysql数据库和mongoDB数据库
- 使用ajax简单的仿照售房网站上根据城市,区域和街道选择房屋信息
- 简单的Python抓取招聘网站信息(1)
- 网站信息统计的简单实现过程 pcsky(原作)
- 使用htmlparser简单抓取京东图书信息存入数据库的小例子
- 简单PHP搜索引擎源代码,需要开启PHP的cURL扩展。功能:对某一网址进行检索,获取网站基本信息,同时提取网站的所有连接。
- 找到一个在上海租房非常不错的网站 - 一步租房网,推荐推荐,综合了赶集,58同城,搜房,安居客等所有的信息
- Python网络爬虫实战:爬取先锋文汇的文章信息并存入MySQL数据库
- Python 爬虫学习2爬取租房网站信息
- 一个简单企业信息网站架构
- 网站信息统计的简单实现过程
- 网站信息统计的简单实现过程
- html写简单的个人信息网站 入门
- 一个简单企业信息网站架构
- 一个mysql数据库的脚本帮助dba简单的管理数据库信息
- ansible获取主机信息并存入mysql数据库
- (简单实例)requests库爬拉勾网信息并存入excel