selenium模拟浏览器爬虫--以福建省土地使用权出让管理系统为例
来源:互联网 发布:sqlserver 2012 版本 编辑:程序博客网 时间:2024/06/10 17:38
我们要获取网上土地出让结果公告的表格(见图1),网站网址:http://fjgpjy.fjgtzy.gov.cn/zpgpublicweb/PublicSysMsg/TradeResultListView.aspx,表格一共有349页,获取的内容存在名为land_right_transfer的数据库中
(一)配置环境
(1)首先安装selenium第三方库,我的已经安装成功了,返回信息如下;找到python安装文件夹 (见图2)
(2)我用的是chrome浏览器,其他浏览器同理,将自己浏览器对应版本的驱动下载下来放在python安装目录中,和python.exe同一个地方 (见图3),其中我的chrome驱动下载地址见博客:http://blog.csdn.net/cz9025/article/details/70160273 ,Firefox自己网上查到就行
(3)测试浏览器是否能正常打开
from selenium import webdriver
url = 'http://fjgpjy.fjgtzy.gov.cn/zpgpublicweb/PublicSysMsg/TradeResultListView.aspx'driver = webdriver.Chrome()
driver.get(url)在python的IDLE中输入这几行代码,看是否有浏览器在自动运行并打开这个页面
(二)流程
我打算一页一页第爬取,本页爬完后,就找到下一页“>"元素所在位置,再模拟click这个元素跳转到下一页,循环点击次数人工控制,由于知道这个网站表格共有348页,所以设置的点击次数要 for i in range(348):
爬取思路是:获取每页的表格元素table,找到每一行,然后再循环每一行的每一列,抓取所有小表格的数据。但是需要注意的是,表格第四列数据并没有在文本内容上,文本内容都是以省略号的形式展示出来,真正的数据在第四列的title元素值上,见图4,所以不能再通过直接取元素文本形式来获得第四列的文本了
rows[i].find_elements_by_tag_name('td')[j].text我们需要找到第四列title元素属性,那么这就需要get_attribute()的方式来获得。还有一点值得注意的是我们不停地点击下一页,虽然设置了time.sleep()暂时让浏览器暂停的方式,很有可能页面打开有问题,获取不了本页的table表单,程序报错。于是需要try来捕捉异常,当发生这样的情况时,就让浏览器休息一分钟,再刷新页面,由于这个网站刷新后页面并不会退回,所以刷新后可继续爬虫。PS:这样获取数据的确有点慢,而且还需要人工监控,防止停顿一分钟后还刷不出页面的情况然后我是没获取一行数据就传入数据库一次,并没有采用先获取后批量入库,这样可以保证错误发生时我们数据库中保存的有之前采集的数据from selenium import webdriverimport pymysqlimport timedef login(): url = 'http://fjgpjy.fjgtzy.gov.cn/zpgpublicweb/PublicSysMsg/TradeResultListView.aspx' driver = webdriver.Chrome() driver.get(url) time.sleep(10) # index可以从你想开始的页面的下一页开始抓取 index = '1' driver.find_element_by_xpath("//*[@id='_ctl0:ContentPlaceHolder1:pagination_input']").clear() driver.find_element_by_xpath("//*[@id='_ctl0:ContentPlaceHolder1:pagination_input']").send_keys(index) driver.find_element_by_xpath("//*[@id='_ctl0:ContentPlaceHolder1:pagination_btn']").click() for i in range(348): # 348是还剩抓取的页面数量,例如index从第10页开始(11页才真正开始抓)的,我们只需要抓到100页,那么此时range中的值就是90 button = driver.find_element_by_xpath(".//*[@id='_ctl0_ContentPlaceHolder1_pagination']//a[last()-1]") button.click() driver.implicitly_wait(40) time.sleep(5) try: nextPage = driver.find_element_by_xpath("//table[@class='TableList']") page = jiexitable(nextPage) except Exception: time.sleep(50) driver.refresh() nextPage = driver.find_element_by_xpath("//table[@class='TableList']") page = jiexitable(nextPage) print("现在已经运行到第%d页" % i) return pagedef jiexitable(table1): # 返回的result 格式长这样[[],[],[],..] conn = pymysql.connect(host='localhost', user='root', passwd='123', db='tianyan', port=3306, charset='utf8') cur = conn.cursor() # 获取一个游标 sql = "INSERT INTO land_right_transfer (id, landnumber, size,landusage,tranprice,bider,Donetime,result)" \ " VALUES ( '%s', '%s', '%s','%s','%s','%s','%s','%s' )" rows = table1.find_elements_by_tag_name('tr') cols = rows[0].find_elements_by_tag_name('td') result = [[0 for col in range(len(cols))] for row in range(len(rows))] # 创建一个二维列表 for i in range(1, len(rows)): for j in range(len(cols)): result[i][j] = rows[i].find_elements_by_tag_name('td')[j].text if j == 3: result[i][j] = rows[i].find_elements_by_tag_name('td')[j].get_attribute('title') cur.execute(sql % tuple(result[i])) conn.commit() cur.close() conn.close() return resultif __name__ == '__main__': start = time.time() tab1 = login() end = time.time() print(end-start)
- selenium模拟浏览器爬虫--以福建省土地使用权出让管理系统为例
- Python 爬虫之 selenium 爬虫,模拟浏览器爬取天猫信息
- 配置Nutch模拟浏览器以绕过反爬虫限制
- Selenium 模拟浏览器
- 房屋产权=房屋所有权+土地使用权
- Python网络爬虫之模拟登录(以知乎为例)
- Python网络爬虫之模拟登录(以知乎为例)
- 福建省烟草专卖准运证网络管理系统
- 以进销存管理系统为例的SSM框架整合
- PYthon Selenium 爬虫 操作浏览器
- 使用Java模拟浏览器登陆网站(以抓取武汉理工大学教务处学生个人课表网页为例)
- python 针对selenium+phontomjs等模拟浏览器爬虫的反爬技术点
- python实现爬虫--以CSDN为例
- 网络爬虫剖析,以Pyspider为例
- 模拟浏览器自动化测试工具Selenium之五Centos系统命令行下部署selenium环境试验
- JSP+Servlet培训班作业管理系统[14] -分页(以人员管理为例)
- 以“文博珠宝管理系统”为例,分析信息管理系统在物流分销中的应用
- [python爬虫]selenium+PhantomJS模拟登陆
- maven-war-plugin生成swagger。json并打包到war包中(springmvc)
- 材质球换贴图(Material与ShareMaterial)
- GitLab升级(8.10.5-9.5.4)
- Mysql主从配置(Mysql5.5)--Windows环境
- PIXI.js源码解析(1)——DisplayObject
- selenium模拟浏览器爬虫--以福建省土地使用权出让管理系统为例
- 学习笔记之面向对象编程15(容器之Iterator)
- 三种还是四种NLP的注意力机制的总结
- 245. 子树
- 遇到WEB-INF下不自动产生class文件的问题
- Oracle创建SEQUENCE
- 面向对象编程思想-解释器模式
- 视频编解码优化的几个概念
- Idea 和 Tomcat 的趣事