Python爬虫代码
from selenium import webdriver
from pyquery import PyQuery as pq
import time
import pymysql
url = 'https://sz.fang.lianjia.com/loupan/bba0eba300/'
#初始化浏览器,我这里用到google chrome,并且用到get()方法传入URL
brow = webdriver.Chrome()
brow.get(url)
time.sleep(3)
#这里我用到jQuery scrollTop() 在这里也是适用的,用來操作滚动条
a = "window.scrollTo(0,800);"
b = "window.scrollTo(0,1600);"
c = "window.scrollTo(0,3200);"
#滑动第1次 、a
brow.execute_script(a)
time.sleep(3)
#滑动第2次、b
brow.execute_script(b)
time.sleep(3)
#滑动第3次、c
brow.execute_script(c)
#定义方法
def Start():
#我这里没有获取页数,直接用range()遍历了!
#提示:最好还是获取总页数,以免抓取的数据遗漏
for i in range(20):
print('开始你的表演...')
#这块我们先找到class="resblock-list-wrapper",并且判断该class是否存在
#因为很多时候网络的问题导致一些资源没有加载完成,就会报错
Label = brow.find_elements_by_class_name('resblock-list-wrapper')
if len(Label) != 0 :
print('正在解析网页请稍等.....')
#调用Traversal()方法
Traversal()
time.sleep(3)
print('数据保存完成-正在跳转到下一页....')
next_page = brow.find_element_by_class_name('next')
next_page.click()
brow.execute_script(a)
time.sleep(3)
#滑动第2次
brow.execute_script(b)
time.sleep(3)
#滑动第3次
brow.execute_script(c)
time.sleep(7)
Traversal()
#这里也是做了一下判断,如果找不到元素则关闭浏览器
else:
print('网页加载异常(5秒后自动关闭浏览器)')
time.sleep(5)
brow.close()
def Traversal():
#解析网页
html = brow.page_source
#我用到pyquery解析器,并且遍历 li 标签,其实都差不多,这个解析器对css选择比较友好,个人感觉
#当然我感觉得没用,还有一些大神也是这样觉得滴
doc = pq(html)
house = doc('.resblock-list-wrapper li').items()
#直接遍历,开始骚操作,提取自己需要的信息
for i in house:
house_data={
'小区':i.find('.name').text(),
'房类':i.find('.resblock-type').text(),
'售卖状态':i.find('.sale-status').text(),
'地址':i.find('.resblock-location').text(),
'内室种类':i.find('.resblock-room').text(),
'面积':i.find('.resblock-area').text(),
'顾问':i.find('.agent').text().strip('新房顾问:'),
'房价':i.find('.number').text(),
'总价':i.find('.second').text(),
'链接':i.find('.resblock-img-wrapper').attr('href')
}
print(house_data)
#当然抓取到的数据我保存到mysql数据库中,改数据库我已经提前建好了表格了的。
#开始数据库 本地地址(你也可以存到其他数据库中)、用户名、密码、端口、数据库名称
db =pymysql.connect(host='localhost',user='root',password='root',port=3306,db='lianjie')
#声明游标
cursor = db.cursor()
#基本的sql插入語句
sql = "insert into lianjie_data(Community,Category,Status,Address,Chamber,Area,Adviser,Unit_price,Total_price,Url) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
params = (house_data["小区"],house_data["房类"],house_data["售卖状态"],house_data["地址"],house_data["内室种类"],house_data["面积"],house_data["顾问"],house_data["房价"],house_data["总价"],house_data["链接"])
#执行语句
cursor.execute(sql,params)
#这里一定要用到commit()提交 不然完成不了信息的保存
db.commit()
#关闭数据库
db.close()
time.sleep(2)
def main():
Start()
if __name__ == '__main__':
main()
Mysql
net start mysql
Mysql -u root -proot
use ...(数据库名)
CREATE TABLE lianjie_data
(
Community varchar(255),
Category varchar(255),
Status varchar(255),
Address varchar(255),
Chamber varchar(255),
Area varchar(255),
Adviser varchar(255),
Unit_price varchar(255),
Total_price varchar(255),
Url varchar(255)
);
效果(Navicat Premium可视化工具)