selenium+ Phantomjs爬取动态网页
对于动态加载,Selenium+Phantomjs的强大打开网页查看网页源码(注意不是检查元素)会发现要爬取的信息并不在源码里面。Selenium+Phantomjs的强大一方面就在于能将完整的源码抓取到,也就是说,从网页源码无法通过解析得到数据。
# -*- coding: utf-8 -*- import xlsxwriterimport sys reload(sys) sys.setdefaultencoding( "utf-8" )from selenium import webdriver from bs4 import BeautifulSoupdef get_grade(url): print(url)#匿名爬虫 #假定9999端口开启tor服务 service_args = ['--proxy=localhost:9999', '--proxy-type=socks5', ]driver = webdriver.PhantomJS(executable_path=r"C:\Users\Administrator\Desktop\phantomjs-1.9.7-windows\phantomjs.exe")driver.get(url)data = driver.page_source# print(data) soup = BeautifulSoup(data, 'lxml')grades = soup.find_all('tr')for grade in grades: global iif '<td>' in str(grade): i += 1 print(i)grade_text =grade.get_text()print(grade_text)grade_text = str(grade_text)city = grade_text[:-13]worksheet.write(i,0,city)time = grade_text[-13:-9]worksheet.write(i,1,time)subs = grade_text[-9:-7]worksheet.write(i,2,subs)s = grade_text[-7:-3]worksheet.write(i,3,s)grade = grade_text[-3:]worksheet.write(i,4,grade)i = -1 workbook = xlsxwriter.Workbook('grades.xlsx') worksheet = workbook.add_worksheet() worksheet.set_column('A:A',10) worksheet.set_column('B:B', 10) worksheet.set_column('C:C', 10) worksheet.set_column('D:D', 10) worksheet.set_column('E:E', 10)urls = ['http://gkcx.eol.cn/soudaxue/queryProvince.html?page='+str(num)for num in range(1,166)]for url in urls: get_grade(url) workbook.close()
http://gkcx.eol.cn/soudaxue/queryProvince.html?page=1
0
西藏2016理科本科一批425
1
西藏2016文科本科一批440
2
新疆2016理科本科一批464
3
新疆2016文科本科一批487
4
宁夏2016理科本科一批465
5
宁夏2016文科本科一批516
6
广西2016理科本科一批502
7
广西2016文科本科一批545
8
内蒙古2016理科本科一批484
9
内蒙古2016文科本科一批477
http://gkcx.eol.cn/soudaxue/queryProvince.html?page=2
10
青海2016理科本科一批416
11
青海2016文科本科一批457
12
甘肃2016理科本科一批490
13
甘肃2016文科本科一批504
14
陕西2016理科本科一批470
15
陕西2016文科本科一批511
16
云南2016理科本科一批525
问题 1.爬取速度慢 2没有开多线程
解决办法 直接获取json 一次性找出包含要抓取信息的js文件,之后就是构造requests请求对象,然后解析json文件
# -*- coding: utf-8 -*- import requestsdef save(school_datas): for data in school_datas: # print(data) year = data['year']province = data['province']type = data['type']bath = data['bath']score = data['score']print(province, year, type, bath,score )for i in range(1, 34): print("第%s页====================="%str(i))# url = "http://data.api.gkcx.eol.cn/soudaxue/queryProvince.html?messtype=jsonp&url_sign=queryprovince&province3=&year3=&page=1&size=100&luqutype3=&luqupici3=&schoolsort=&suiji=&callback=jQuery1830426658582613074_1469201131959&_=1469201133189" data = requests.get("http://data.api.gkcx.eol.cn/soudaxue/queryProvince.html", params={"messtype":"json","url_sign":"queryprovince","page":str(i),"size":"50","callback":"jQuery1830426658582613074_1469201131959","_":"1469201133189"}).json()print("每一页信息条数——>", len(data['school']))print("全部信息条数——>", data["totalRecord"]['num'])school_datas = data["school"]save(school_datas)
第1页=====================
('\xe6\xaf\x8f\xe4\xb8\x80\xe9\xa1\xb5\xe4\xbf\xa1\xe6\x81\xaf\xe6\x9d\xa1\xe6\x95\xb0\xe2\x80\x94\xe2\x80\x94>', 50)
('\xe5\x85\xa8\xe9\x83\xa8\xe4\xbf\xa1\xe6\x81\xaf\xe6\x9d\xa1\xe6\x95\xb0\xe2\x80\x94\xe2\x80\x94>', u'1734')
(u'\u897f\u85cf', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'425')
(u'\u897f\u85cf', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'440')
(u'\u65b0\u7586', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'464')
(u'\u65b0\u7586', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'487')
(u'\u5b81\u590f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'465')
(u'\u5b81\u590f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'516')
(u'\u5e7f\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'502')
(u'\u5e7f\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'545')
(u'\u5185\u8499\u53e4', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'484')
(u'\u5185\u8499\u53e4', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'477')
(u'\u9752\u6d77', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'416')
(u'\u9752\u6d77', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'457')
(u'\u7518\u8083', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'490')
(u'\u7518\u8083', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'504')
(u'\u9655\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'470')
(u'\u9655\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'511')
(u'\u4e91\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'525')
(u'\u4e91\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'560')
(u'\u8d35\u5dde', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'473')
(u'\u8d35\u5dde', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'551')
(u'\u56db\u5ddd', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'532')
(u'\u56db\u5ddd', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'540')
(u'\u6d77\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'602')
(u'\u6d77\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'653')
(u'\u5e7f\u4e1c', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'508')
(u'\u5e7f\u4e1c', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'514')
(u'\u6e56\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'517')
(u'\u6e56\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'530')
(u'\u6e56\u5317', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'512')
(u'\u6e56\u5317', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'520')
(u'\u6cb3\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'523')
(u'\u6cb3\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'517')
(u'\u5c71\u4e1c', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'537')
(u'\u5c71\u4e1c', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'530')
(u'\u6c5f\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'529')
(u'\u6c5f\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'523')
(u'\u798f\u5efa', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'465')
(u'\u798f\u5efa', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'501')
(u'\u5b89\u5fbd', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'518')
(u'\u5b89\u5fbd', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'521')
(u'\u6d59\u6c5f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'600')
(u'\u6d59\u6c5f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'603')
(u'\u6c5f\u82cf', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'353')
(u'\u6c5f\u82cf', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'355')
(u'\u9ed1\u9f99\u6c5f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'486')
(u'\u9ed1\u9f99\u6c5f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'481')
(u'\u5409\u6797', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'530')
(u'\u5409\u6797', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'531')
(u'\u8fbd\u5b81', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'498')
(u'\u8fbd\u5b81', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'525')
第2页=====================
('\xe6\xaf\x8f\xe4\xb8\x80\xe9\xa1\xb5\xe4\xbf\xa1\xe6\x81\xaf\xe6\x9d\xa1\xe6\x95\xb0\xe2\x80\x94\xe2\x80\x94>', 50)
('\xe5\x85\xa8\xe9\x83\xa8\xe4\xbf\xa1\xe6\x81\xaf\xe6\x9d\xa1\xe6\x95\xb0\xe2\x80\x94\xe2\x80\x94>', u'1734')
(u'\u5c71\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'519')
(u'\u5c71\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'518')
(u'\u6cb3\u5317', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'525')
(u'\u6cb3\u5317', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'535')
(u'\u4e0a\u6d77', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'360')
(u'\u4e0a\u6d77', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'368')
(u'\u91cd\u5e86', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'525')
(u'\u91cd\u5e86', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'527')
(u'\u5929\u6d25', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'512')
(u'\u5929\u6d25', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'532')
(u'\u5317\u4eac', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e00\u6279', u'548')
(u'\u5317\u4eac', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e00\u6279', u'583')
(u'\u65b0\u7586', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'363')
(u'\u65b0\u7586', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'372')
(u'\u5b81\u590f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'354')
(u'\u5b81\u590f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'406')
(u'\u9752\u6d77', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'353')
(u'\u9752\u6d77', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'379')
(u'\u7518\u8083', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'367')
(u'\u7518\u8083', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'391')
(u'\u9655\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'344')
(u'\u9655\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'381')
(u'\u4e91\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'400')
(u'\u4e91\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'445')
(u'\u6d77\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'478')
(u'\u6d77\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'472')
(u'\u6e56\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'396')
(u'\u6e56\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'431')
(u'\u6cb3\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'370')
(u'\u6cb3\u5357', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'393')
(u'\u5b89\u5fbd', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'446')
(u'\u5b89\u5fbd', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'453')
(u'\u6d59\u6c5f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'270')
(u'\u6d59\u6c5f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'267')
(u'\u6c5f\u82cf', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'265')
(u'\u6c5f\u82cf', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'282')
(u'\u9ed1\u9f99\u6c5f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'309')
(u'\u9ed1\u9f99\u6c5f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'322')
(u'\u5409\u6797', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'286')
(u'\u5409\u6797', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'275')
(u'\u5929\u6d25', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'336')
(u'\u5929\u6d25', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'320')
(u'\u5317\u4eac', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e09\u6279', u'438')
(u'\u5317\u4eac', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e09\u6279', u'488')
(u'\u65b0\u7586', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'394')
(u'\u65b0\u7586', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'415')
(u'\u5b81\u590f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'434')
(u'\u5b81\u590f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'486')
(u'\u5e7f\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'333')
(u'\u5e7f\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'400')
第3页=====================
('\xe6\xaf\x8f\xe4\xb8\x80\xe9\xa1\xb5\xe4\xbf\xa1\xe6\x81\xaf\xe6\x9d\xa1\xe6\x95\xb0\xe2\x80\x94\xe2\x80\x94>', 50)
('\xe5\x85\xa8\xe9\x83\xa8\xe4\xbf\xa1\xe6\x81\xaf\xe6\x9d\xa1\xe6\x95\xb0\xe2\x80\x94\xe2\x80\x94>', u'1734')
(u'\u5185\u8499\u53e4', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'346')
(u'\u5185\u8499\u53e4', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'375')
(u'\u9752\u6d77', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'380')
(u'\u9752\u6d77', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'415')
(u'\u7518\u8083', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'435')
(u'\u7518\u8083', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'455')
(u'\u9655\u897f', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'423')
(u'\u9655\u897f', u'2016', u'\u6587\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'460')
(u'\u4e91\u5357', u'2016', u'\u7406\u79d1', u'\u672c\u79d1\u4e8c\u6279', u'445')
注意jsonDump jsonLoad 方法使用 简单的数据处理暂不描述了 这个显示的是拉丁文,解决办法很多 不过多描述,
selenium+ Phantomjs爬取动态网页相关推荐
- Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)
由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法, (1)分析页面请求 (2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法 一.安装sele ...
- 用scrapy+selenium + phantomjs 爬取vip网页,保存为json格式,写入到mysql数据库,下载图片(二)
接上一编 weipin.py文件的代码 : # -*- coding: utf-8 -*- import scrapy from weipinhui.items import WeipinhuiIte ...
- 用scrapy+selenium + phantomjs 爬取vip网页,保存为json格式,写入到mysql数据库,下载图片(一)
用命令在终端创建一个项目: scrapy startproject myvipspider 进入到myvipspider项目下运行命令: scrapy genspider weipin "v ...
- python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫
一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...
- 【爬虫】Selenium爬取动态网页的base64图片
文章简介 Selenium爬取动态网页的base64图片,并解决页面完整加载缓慢,base64字符串的获取和格式转码,一些页面不存在,部分照片无法加载等问题.后附源码. 目录 1,需求 2,环境和使用 ...
- Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)
文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...
- python动态页面元素爬取_爬取动态网页python+Web kit
上一篇文章爬取动态网页python+selenium+webdriver介绍了爬取动态网站的一种模拟浏览器的方法,该方法的优劣也很明显 优: 可以模拟任何人的操作,输入账号密码,点击登录等等操作 劣: ...
- python动态渲染抓取网页_爬取动态网页python+Web kit
上一篇文章爬取动态网页python+selenium+webdriver介绍了爬取动态网站的一种模拟浏览器的方法,该方法的优劣也很明显 优: 可以模拟任何人的操作,输入账号密码,点击登录等等操作 劣: ...
- chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...
系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...
最新文章
- 用Visio制作周行事历
- EEGLAB处理脑电视频教程 part1-3
- mysql 修改max_connections
- zoj 3762(求三角形的最大高)
- Exchange环境搭建心得
- Java探索之旅(11)——抽象类与接口
- Java多线程--死锁例子
- arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...
- linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...
- asp.net如何解决传递中文参数乱码问题
- 使用NumberFormatter判断TextInput输入内容是否为数字,如果是则格式化数字。
- C语言手写模拟字符串String类
- 4.6 Spark SQL 数据清洗
- 持续集成环境(Hudson)搭建
- 【特征提取】基于matlab频带方差端点检测【含Matlab源码 1765期】
- python2.7换行输出多个变量
- SitePoint播客#115:直播在WordCamp Raleigh第2部分
- SHP(shapefile)文件
- 矩阵分析与应用+张贤达
- 作业成本分析法如何计算?作业成本怎么分析计算