这是我第一个爬虫项目,因为我有一些其他语言的基础,所以在入坑python十来天后终于完成了一个小项目,其间的辛酸不足为外人道也...说了这么多,那就让我们开始吧。

1.先看看使用的库:

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,大家也可以尝试一下:

# # 直接获取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

获取租房信息:

# 获取房屋信息
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").texthouse_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

设置登录数据库的参数以及登入函数:

# 数据库登录参数设置
DATABASE ={'host': 'localhost',  #如果是远程数据库,此处为远程服务器的IP地址'database': 'test','user': 'root','password': '******'
}# 登入数据库
def load_db(setting):return pymysql.Connect(**setting)

将数据存入数据库的插入函数:

# 插入数据库函数
def insert_sql(db,house_info):dic = house_infols = 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 % diccursor = db.cursor()try:cursor.execute(sql)db.commit()except Exception as e:print(e)

插入函数作为数据库存储的核心,其中的SQL生成语句是重中之重,可以一整行一整行的将数据存入,ignore避免重复存储,使用游标执行SQL语句,然后上传

最后进入正题,调用函数完成爬取,存储操作:

# 根据规律获取所有页面链接
def get_allpages():links = []for i in range(2,11):links.append('https://bj.lianjia.com/zufang/pg'+str(i)+'/')return linksfirst_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!感谢大家的阅读!

简单的爬取某租房网站租房信息并存入MySQL数据库相关推荐

  1. Java爬虫 爬取某招聘网站招聘信息

    Java爬虫 爬取某招聘网站招聘信息 一.系统介绍 二.功能展示 1.需求爬取的网站内容 2.实现流程 2.1数据采集 2.2页面解析 2.3数据存储 三.获取源码 一.系统介绍 系统主要功能:本项目 ...

  2. 爬取京东本周热卖商品所有用户评价存入MySQL

    爬取京东本周热卖商品所有用户评价存入MySQL       说明 本项目是对(爬取京东本周热卖商品基本信息存入MySQL)项目的追加,所以会有一些内容上的衔接,例如工具的使用方法等在此篇就不赘述,大家 ...

  3. 我爬取了猪八戒网站的信息,发现了程序员做威客不得不进的坑

    猪八戒威客网是一个比较成熟的威客社区,雇主和威客们双向选择,既方便了中小雇主,又方便广大程序员兼职挣外快,早日实现财务自由. 我在爬取了猪八戒网站近段时间的任务信息(约3000条)后,利用这些为数不多 ...

  4. python爬虫10万信息mysql_python爬虫:爬取易迅网价格信息,并写入Mysql数据库

    #!/usr/bin/python # -*- encoding:utf-8 -*- '''思路:1.从易迅网爬取冰箱的数据,包括品牌,型号,价格,容积,能效等级,制冷方式,门款式,显示方式,定频/变 ...

  5. 简单爬虫——爬取Scrape|Movie网站电影排行Top10

    1.简单说明 本教程仅用来学习,不用于商业目的.这是第一次写文章,排版可能有点差,希望大家理解,嘻嘻. 不喜欢看分析的同学可以直接跳到最后有源代码 我们要爬的网站为:https://static1.s ...

  6. python简单爬取人人车网站在售北京二手车车况信息并存入mysql数据库

    直接上代码 ''' 人人车 北京二手车 1.名称,2.价格,3.详情,4.图片,5.生产日期,6.公里数,7.首付,8.降价信息,9.车牌所在地,10.排放标准 11.过户记录,12.车主评价,13. ...

  7. 手把手教你用python爬取人人贷网站借款人信息

    P2P是近年来很热的一个行业,由于这个行业在国内兴起才不久,国内的很多学者对这个行业都兴趣盎然,在大学研究互联网金融的学者更是有一大群.小编是学金融出身,深知数据在做学术研究的重要性,之前有不少学互联 ...

  8. python:爬取天气预报+美女网站数据信息

    一.爬取湛江天气预报信息 url:http://www.weather.com.cn/weather/10128100101A.shtml 1.思路分析: ①先爬取网页所有数据,div/ul/li,获 ...

  9. 【Python】爬取国外购物网站商品信息实战

    1.项目目录 ----Project ------venv --------main.py --------brickseek.py --------database.py 2.main.py imp ...

最新文章

  1. B站王道论坛计算机网络,成都理工大学计算机网络考研学长经验分享
  2. 红外热成像拥抱无人机 迸发安防救援新活力
  3. zabbix frontends php,zabbix 3.0.3 安装
  4. Nacos服务注册接口
  5. android数据的五种存储方式
  6. hdu 2026 首字母变大写
  7. react学习(28)---react中componentWillReceiveProps
  8. 理论 | 当 Spring Boot 遇上了消息队列......
  9. AS使用NDK Cmake方式依赖第三方库注意事项
  10. network-opt 优化网络拓扑结构
  11. 内网渗透 - 权限维持 - Linux
  12. python使用sax实现xml解析
  13. PHP自动加载(上)——spl_autoload_register
  14. 不混淆 android jni,JNI 防混淆 Android proguard
  15. 清华大学计算机系本科课程,清华大学计算机系本科生全部课程详细介绍
  16. Python绘图 \ 数据可视化
  17. C语言 —— while循环语句用法与例题
  18. 海思OSD开发系列(一) SDL_TTF框架移植
  19. kubernetes学习例子
  20. 新版标准日本语中级_第五课

热门文章

  1. 如何用GameMakerStudio开发基于物理引擎的平台游戏 | Lynda教程 中文字幕
  2. HTML 表单 表格 列表
  3. 全球围剿下,苹果还能挺多久?
  4. Java ffmpeg视频压缩IOS播放没有声音问题解决(超级简单)
  5. [HEVC] HEVC学习(五) —— 帧内预测系列之三
  6. error: ‘stol’ was not declared in this scope
  7. 一则软件需求有关的漫画
  8. Excel如何快速划分等级或成绩评级
  9. 机器学习(算法篇)——K-近邻算法
  10. 教你识别思科交换机型号