利用PYHTON爬虫爬取恋家网房价
import openpyxl # 导入处理excel文件用到的库
import requests # 导入requests 请求库
from lxml import etree # 导入lxml解析库
import pymysql
def main(baseurl):
"""
1.爬取网页
2.逐一解析
3.保存数据
:return:
"""
print("START爬取楼盘")
# baseurl = "https://cd.fang.lianjia.com/loupan/"
num = int(input("需爬页数:"))
datalist = getdata(baseurl, num) #用下面的getdata函数爬取网页返回数据给datalist
# 保存数据
savepath = "a.xlsx" #设置数据上传到aEXCEL
savedata(datalist, savepath) #调用下面写的保存数据到excel的函数
savedatadb(datalist)
print("OK!") #函数成功调用保存之后输出ok
def getdata(baseurl, num):
datalist = []
x = [str(i) for i in range(1, num+1)] # 字符串类的数字序列,用于拼接网址
global name # 用于拼接网址
name = str(input("请输入查找的相关内容:")) # 用于拼接网址
for i in range(0, num):
# https://cd.fang.lianjia.com/loupan/pg2rs1
# 爬取网页
url = baseurl + "pg" + x[i] + "rs" + name
print(url)
resp = requests.get(url) #使用get()方法抓取网页信息
# print(resp.text)
#用etree.HTML来解析这个网页的结构,最后通过xpath获取自己所需的内容
html = etree.HTML(resp.text)
# 获取网页信息
divs = html.xpath("/html/body/div[3]/ul[2]/li")
# 大界面路径
for div in divs:
# 每个小项
data = []
title = div.xpath("./div/div[1]/a/text()")[0]
# 小区名称标题
data.append(title)
#位置信息
post1 = div.xpath("./div/div[2]/span[1]/text()")[0]
post2 = div.xpath("./div/div[2]/span[2]/text()")[0]
post3 = div.xpath("./div/div[2]/a/text()")[0]
post = (post1.strip() + "的" + post2 + "的" + post3) # 位置
data.append(post)
# 简介信息
info1 = div.xpath("./div/div[5]/span[1]/text()")[0]
info2 = div.xpath("./div/div[5]/span[2]/text()")[0]
info3 = div.xpath("./div/div[5]/span[3]/text()")[0]
info4 = div.xpath("./div/div[5]/span[4]/text()")[0]
info = (info1 + "," +info2 + "," +info3 + "," + info4)
data.append(info)
# 价格信息
price = div.xpath("./div/div[6]/div[1]/span[1]/text()")[0]#价格
price = (price + "元/㎡")
data.append(price)
#价格信息
#将所有数据给到datalist列表
datalist.append(data)
print("得到数据个数为: ", len(datalist))
return datalist
# 得到指定网页信息
def askurl(url):
# 模拟浏览器头部信息
head = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
resp = requests.get(url, headers=head) # 请求
html = etree.HTML(resp.text) # 解析
resp.close()
# 关掉爬虫链接
return html
# 返回得到的html代码
# 保存到excel
def savedata(datalist, savepath):
"""
将解析后的数据保存在Excel文件中
:param datalist: 网页解析后的数据
:param savepath: Excel文件保存路径
:return:
"""
wk = openpyxl.load_workbook(savepath)
sheets = wk.sheetnames
# 获取sheet中所有表名
flag = 0
# 0 标志无同名,1 标志有同名
for i in sheets:
# 循环整个表名
if i == name:
flag = 1
if flag == 1:
del wk[name]
# 删除sheet,在创建,清空sheet内容
wk.create_sheet(title=str(name), index=0)
# 新的sheet
sheet = wk[name]
col = ('序号', '小区名称', '位置', '简介信息', '价格')
sheet.append(col)
for i in range(0, len(datalist)):
data = datalist[i]
# 这一行的内容
sheet.cell(i+2, 1).value = i+1
# 序号
for j in range(0, len(data)):
sheet.cell(i + 2, j + 2).value = data[j]
# 第一行为内容,第一列为序列号
wk.save(savepath)
print("成功保存入excel")
#保存到数据库
def savedatadb(datalist):
"""
:return:
"""
# 初始化数据库
init_DB()
# 连接数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='',
port=3306,
db='re',
charset='utf8',
)
cur = conn.cursor() # 获取游标
# 将数据逐一保存到数据库
sql1 = '''insert into `%s`''' % name
for data in datalist:
for index in range(len(data)):
data[index] = '"' + data[index] + '"'
sql2 = '''(`title`,`post`, `info`, `price`) value(%s);''' % (", ".join(data))
sql = sql1 + sql2
print(sql)
cur.execute(sql) # 数据执行
conn.commit() # 数据提交
cur.close() # 关闭游标
conn.close() # 关闭连接
print("保存数据库成功")
# 初始化数据库
def init_DB():
"""
初始化数据库
:return:
"""
# 若不加if not exists,则每次运行程序需要先删除database;否则不用先删除,但无法更新sql里的格式
# 各种数据,sql事务
sql1 = '''DROP TABLE IF EXISTS `%s`;''' % name
sql2 = '''
CREATE TABLE IF NOT EXISTS `%s` (
`id` int(4) primary key not null auto_increment,
`title` text default NULL,
`post` text default NULL,
`info` text default NULL,
`price` text default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
''' % name
# 连接数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='',
port=3306,
db='re',
charset='utf8',
)
# 获取光标
cursor = conn.cursor()
try:
cursor.execute(sql1) # 执行sql语句,如果存在表则删除表然后创建Mysql
cursor.execute(sql2) # 执行sql语句
conn.commit() # 提交
print("数据库初始化成功")
except Exception as e:
print(e)
conn.rollback() # 确保数据库操作的原子性问题,多次操作要么都执行,要么都不执行,回滚
print("数据库初始化数据失败")
finally:
cursor.close() # 关闭游标
conn.close() # 关闭
if __name__ == "__main__":
# 调用函数
main("https://cd.fang.lianjia.com/loupan/")
利用PYHTON爬虫爬取恋家网房价相关推荐
- 在当当买了python怎么下载源代码-python爬虫爬取当当网
[实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...
- 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...
[爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...
- python爬虫爬取当当网的商品信息
python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...
- python爬虫爬取知网
python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...
- [python爬虫]爬取天气网全国所有县市的天气数据
[python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...
- 利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!
首先我准备利用mysql来存储我爬取的信息,建一个host表如下: 然后下载pymysql ,利用它与数据库链接,因为在这里我只涉及到写入的操作: Unit_Mtsql 然后就是使用Beautiful ...
- Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息
XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...
- python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)
爬取链家房价信息(未完待续) items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # ...
- [Python爬虫]爬取东方财富网公司公告需要注意的几个问题
在上一篇文章中,以爬取东方财富网公司公告为例,介绍了如何爬取利用ajax加载的网页,以及如何模拟翻页.但是,在实际应用的过程中,发现了一些问题.接下来就来一一分析解决. 问题一.公告数量过多,后面的公 ...
最新文章
- (无奈之举)2011年01月26号日志
- 关于DateTime对象序列化为Json之后的若干问题
- 基于Spark ML 聚类分析实战的KMeans
- Linux-鸟菜-6-文件与目录管理
- 浅析Web2.0技术
- Apache Mahout:构建垃圾邮件过滤器服务器
- 神牛笔记:吉林大学ACM总结(fennec)
- CSS之Responsive网页设计的三个特性
- [转载] python 中的时间,日期,时间戳互相转换
- Visual Studio 2019报错:缺少mfc120.dll
- phpstrom自己定义和原本的常用快捷键
- 学生表,选课表,课程表
- windows 使用docker构建镜像
- 微信小程序-云支付那些事儿
- kali linux win10桌面,一键伪装成Win 10,Kali Linux 2019年最终版重磅功能预览
- 华为linux不识别U盘启动,华为电脑如何用u盘启动不了怎么办
- 机器学习(1)-项目 0: 预测泰坦尼克号乘客生还率
- Win10下用Strokeit的方法
- 从零搭建hyperf docker镜像
- java赋值运算的类型转换出新的问题_Java中byte、short、char、int、long运算时自动类型转化问题...