Selenium.webdriver爬虫

 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可视化工具)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerryswing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值