from selenium import webdriver
import time
import pymysqlclass GovementSpider(object):def __init__(self):self.browser = webdriver.Chrome()self.one_url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'# 创建数据库相关变量self.db = pymysql.connect('localhost','root','123456','govdb',charset='utf8')self.cursor = self.db.cursor()# 定义3个列表,为了excutemany()self.province_list = []self.city_list = []self.county_list = []# 获取首页,并提取二级页面链接(虚假链接)def get_false_url(self):self.browser.get(self.one_url)# 提取二级页面链接 + 点击该节点td_list = self.browser.find_elements_by_xpath('//td[@class="arlisttd"]/a[contains(@title,"代码")]')if td_list:# 找节点对象,因为要click()two_url_element = td_list[0]# 增量爬取,取出链接和数据库version表中做比对two_url = two_url_element.get_attribute('href')sel = 'select * from version where link=%s'self.cursor.execute(sel,[two_url])result = self.cursor.fetchall()if result:print('数据已最新,无需爬取')else:# 点击two_url_element.click()time.sleep(5)# 切换browserall_handles = self.browser.window_handlesself.browser.switch_to_window(all_handles[1])# 数据抓取self.get_data()# 结束之后把two_url插入到version表中ins = 'insert into version values(%s)'self.cursor.execute(ins,[two_url])self.db.commit()# 二级页面中提取行政区划代码def get_data(self):# 基准xpathtr_list = self.browser.find_elements_by_xpath('//tr[@height="19"]')for tr in tr_list:code = tr.find_element_by_xpath('./td[2]').text.strip()name = tr.find_element_by_xpath('./td[3]').text.strip()print(name,code)# 判断层级关系,添加到对应的数据库表中(对应表中字段)# province: p_name p_code# city    : c_name c_code c_father_code# county  : x_name x_code x_father_codeif code[-4:] == '0000':self.province_list.append([name, code])# 单独判断4个直辖市放到city表中if name in ['北京市', '天津市', '上海市', '重庆市']:city = [name, code, code]self.city_list.append(city)elif code[-2:] == '00':city = [name, code, code[:2] + '0000']self.city_list.append(city)else:# 四个直辖市区县的上一级为: xx0000if code[:2] in ['11','12','31','50']:county = [name,code,code[:2]+'0000']# 普通省市区县上一级为: xxxx00else:county = [name, code, code[:4] + '00']self.county_list.append(county)# 和for循环同缩进,所有数据爬完后统一excutemany()self.insert_mysql()def insert_mysql(self):# 更新时一定要先删除表记录del_province = 'delete from province'del_city = 'delete from city'del_county = 'delete from county'self.cursor.execute(del_province)self.cursor.execute(del_city)self.cursor.execute(del_county)# 插入新的数据ins_province = 'insert into province values(%s,%s)'ins_city = 'insert into city values(%s,%s,%s)'ins_county = 'insert into county values(%s,%s,%s)'self.cursor.executemany(ins_province,self.province_list)self.cursor.executemany(ins_city,self.city_list)self.cursor.executemany(ins_county,self.county_list)self.db.commit()print('数据抓取完成,成功存入数据库')def main(self):self.get_false_url()# 所有数据处理完成后断开连接self.cursor.close()self.db.close()# 关闭浏览器self.browser.quit()if __name__ == '__main__':spider = GovementSpider()spider.main()

Python利用selenium爬取行政区域存到MySQL里相关推荐

  1. python利用selenium爬取X蜂窝热门游记

    最近因项目需要,学习了下爬虫.之前都是完成的静态网页的爬去,但大部分网页都是动态加载AJAX,所以学习了selenium.当然也可以通过在network中查找隐藏的网页内容,在利用requests去爬 ...

  2. python利用selenium爬取京东数据

    一直以来都是看别人博客学习,这次就自己发个,回馈回馈 先放上成功图,表示可用(末尾有打包的百度云链接供下载测试) 需要的模块,selenium pyquery,pymysql,还需要谷歌浏览器及其ch ...

  3. python利用selenium爬取网易云入驻歌手id、歌手主页id、歌手姓名、歌手粉丝数量

    首先需要访问入驻歌手页,可以看到两个a结点中的链接,其中第一个链接为歌手主页,后面的数字是其主页id:第二个链接为歌手的信息主页,后面的数字为歌手id,通过第二个链接的访问可以查看歌手的粉丝数量 成功 ...

  4. 利用Selenium爬取淘宝商品信息

    文章来源:公众号-智能化IT系统. 一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样. ...

  5. Python利用Scrapy爬取前程无忧

    ** Python利用Scrapy爬取前程无忧 ** 一.爬虫准备 Python:3.x Scrapy PyCharm 二.爬取目标 爬取前程无忧的职位信息,此案例以Python为关键词爬取相应的职位 ...

  6. python 使用 selenium 爬取中国福利彩票双色球历史中奖号码

    python 使用 selenium 爬取中国福利彩票双色球历史中奖号码 前期准备 版本:python3 模块:selenium.time.pprint 一开始使用的是 tree 的方式获取数据,但发 ...

  7. python利用bs4爬取外国高清图片网站

    python利用bs4爬取外国高清图片网站 爬取高清图片 爬取高清图片 import re import requests from bs4 import BeautifulSoup import o ...

  8. python使用selenium爬取联想官网驱动(一):获取遍历各驱动的下载网址

    python使用selenium爬取联想官网驱动(一):获取遍历各驱动的下载网址然后wget命令试验下载 由于初期学习,所以先拿一个型号的产品驱动试验. (1)以下为在联想某型号产品获取相关驱动下载的 ...

  9. [python爬虫] Selenium爬取内容并存储至MySQL数据库

    前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息.通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的.这篇文章主要讲述通过Selenium ...

最新文章

  1. 【Flutter】Flutter 布局组件 ( PhysicalModel 组件 )
  2. Java中的文件下载
  3. 10行代码AC——1016 部分A+B (15分)
  4. m.2接口和nvme区别_透明款散热不好,那么ORICO 全铝NVMe固态硬盘盒了解一下?
  5. 全局替换资源_BitLocker+VHD替换TrueCrypt及其后继VeraCrypt
  6. Baxter实战 (一)ubuntu14.04安装ROS-Indigo
  7. 百度核心技术:详解百度富媒体检索比对系统的关键技术
  8. php 工业通讯录,PHP 制作通讯录(六)
  9. getch方法_如何实现getch()函数的功能
  10. linux文件放在哪个目录,linux中驱动放在哪个目录下
  11. 永磁同步电机dq坐标系中转矩公式中系数3/2的由来
  12. 日常中的迅捷PDF转换器
  13. 分类问题-决策树模型
  14. Windows系统常用网络命令详解及命令示例(全)
  15. ERROR: configuration failed for package ‘stringi’
  16. ajax.googleapis firefox,使用Redirector插件解决googleapis公共库加载的问题【转】
  17. 混沌初开:全新 HarmonyOS 2 正式到来!
  18. 靶机渗透练习84-The Planets:Earth
  19. 智能手持终端CPU选型报告
  20. 全国计算机等级三级数据库技术知识点

热门文章

  1. java -server
  2. http://codeforces.com/problemset/problem/158/B Taxi
  3. 一文带你学会AB实验最佳流程
  4. C4Dr18安装完成双击图标无任何反应,缺失libmmd.dll
  5. 央视影音大屏版apk下载_央视影音下载安装-央视影音 安卓版v7.0.4-PC6安卓网
  6. virture box上的centos虚拟机,在宿主机ip变化后的修正措施
  7. Cygwin的替代软件Gow
  8. compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion
  9. python学习027-----python之函数(三):函数返回值、局部变量与全局变量
  10. 什么是镜像?阿里云服务器镜像是什么?镜像怎么选?