学习过程
这次作业主要是python爬虫,由于之前并没有接触过这个东西,所以我先到网上简单地学习了一下python语言,具体的学习网站python基础教程-菜鸟教程
操作部分
安装环境:pycharm编程环境+anaconda包集+selenium库+phantomJS无界面爬虫浏览器
在pycharm中新建.py文件开始编程。
导入部分:
from selenium import webdriver #导入部分
from bs4 import BeautifulSoup
import xlwt#制成excel表格的一个库
import string
phantomjs_path='C:UsersmazhuangDesktopWorkshopphantomjs-2.1.1-windows/bin/phantomjs.exe' #加载浏览器驱动,无界面爬虫浏览器在电脑中的路径
driver = webdriver.PhantomJS(phantomjs_path)
打开网页:
URL = '目标网址' #网页地址,即你所要抓取数据的网页
driver.get(URL)#返回网页地址
driver.implicitly_wait(10)#设置隐式等待时长
模拟登陆:
首先,要进行元素的定位。
单个元素定位:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
多个元素定位:
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
其中,id,name,xpath等都是要从网页那里通过检查元素的得到的标签。比如说,要模拟登陆首先要进行网页上学号和密码输入框的定位,此时,用浏览器打开目标网页,右键单击要输入学号的地方,检查源,得到其id,name等信息在运用上边提到的函数进行元素定位。
页面的交互,我主要用到了这两个函数:
click()//模拟鼠标的左键点击
send_key(value)//类似于键盘传输值的信息
submit()//模拟提交
如:要进行学号的输入:
driver.find_element_by_id("textfield").send_keys('学号')//textfiled即为通过定位元素扎到的标签,用send_key(value)将学号信息传输过去
要进行历史成绩查询的点击:
driver.find_element_by_link_text('历史成绩查询').click()//这里主要演示click的用法,submit()用法类似
用BeautifulSoup来抓取解析自己所需要的信息:
lscj = driver.find_element_by_id('undefined').get_attribute("innerHTML")#找到要抓取的模块
Soup = BeautifulSoup(lscj, 'lxml')
可以用print Soup pretiffy()来运行一下看是不是自己需要的信息。
将抓取到的信息写进excel表格
首先要引入xlwt库
import xlwt
excel的写入
exl = xlwt.Workbook(encoding='utf-8',style_compression=0)//创建用于写excel的exl对象其中encoding=‘utf-8’是防止解析出来的中文乱码
sheet = exl.add_sheet('mazh', cell_overwrite_ok=True)//创建表单,并且声明为可以覆盖
然后,通过sheet.write(列,行,内容)语句将所抓取的数据写进去。在进行数据写入的时候需要先找到要录入表格元素的标签,然后通过循环语句将要写入的数据写进表格。找到元素标签,主要运用这个语句:
Soup.find_all('标签名称')
用 变量.string 来获取该处的内容
别忘了用.decode(‘utf-8’)来解码。
最后保存
exl.save("文件名.xls")
遇到的问题:
(1)一开始,对一些定位元素的函数不会用,于是我就搜了一些运用这些函数的实例,这个实例运用推荐给大家定位元素算法的实例运用
(2)对将信息写入excel表格毫无头绪,于是就搜了一下这个网站python爬虫excel的读写
(3)一开始所保存的表格出来是乱码的,在问了同学之后,用decode(‘utf-8’)先解码再打印就好了。
还未解决的问题
由于我的成绩有22条,而页面上显示了20条,需要将页面显示数设置成50,我尝试用了各种方法,都没有成功,虽然并没有报错,但是页面效果并无反应。关于下拉框选择我尝试的方法如下网页1网页2
感悟及体会
之前没有接触过python,所以对于很多东西都无从下手,但是在自我摸索的过程中,虽然很费时费力,但是真正自学到东西还是蛮开心的,再者,就是对于自己一些连方法都看不懂的语句,要多找一些例子来看一下,在例子中更能理解其如何运用。等自己真正把这件事做出来的时候,就会觉得,其实也没什么难得。
最后十分感谢,在我自己实在摸索不出来的时候,肖同学对我的帮助,在这里推荐一下她的博客,博客