初等爬虫的学习过程1
来源:互联网 发布:淘宝千人千面收费吗 编辑:程序博客网 时间:2024/06/01 23:55
闲来无事,学习一下爬虫的编写过程,总归也算是python的重点应用方式啊。首先先对爬虫做一个总结,爬虫就是按照一个一个的链接爬满网络,然后将需要的内容保存下来。目前只是初级爬虫的编写,主要目的是学习流程。
1、爬虫爬虫首先要从一个链接开始,就显示蜘蛛一开始搭建的那根线,从那根线之爬满每一个链接,然后从这些链接中再向外爬,由此才可以爬完一个网站,或者再打一点爬满全网。搜索引擎就是爬虫功能的一个重要实例
2、首先获取初始链接,这次编写我们从真爱网开始玩起,目的是为了学习技术,首先使用python的urllib库,这个库可以直接获取网页的源代码,具体使用方式如下:
def gethtml(url):
page=urllib.urlopen(url)
html=page.read()
return html
这样就可以直接获取珍爱网首页的html信息再用
print gethtml(http://www.zhenai.com),将信息打印。单还要注意编码问题
2、在上一步里我们获得了珍爱网的首页html,单很明显首页是不会展示大量的图片的,许多的信息需要登录之后才能取得,在这时候urllib库就力不从心了,此时我选择selenium来进行模拟登录和以后的搜索操作
3、对于登录搜索这类简单的html操作,基本可以略过直接上代码:
def zhenai_login(myusername,mypassword): browser = webdriver.Firefox() browser.get('http://www.zhenai.com/') time.sleep(3) username = browser.find_element_by_id('jcLoginName') username.send_keys(str(myusername)) password = browser.find_element_by_id('jcLoginPass') password.send_keys(mypassword) logon = browser.find_element_by_link_text('登录') logon.click() time.sleep(3) search=browser.find_element_by_link_text('搜索') search.click() time.sleep(3) return browser
此时我们就得到了一个登录后的搜索条件的webdriver对象,后面可以直接使用这个对象获取界面的html信息
4、现在我们又遇到了另一个问题,珍爱网的搜索必须手动向下才能自动加载更多的图片,因此我们需要模拟将界面向下拉的操作,这种操作可以用不同的方式实现,此处我使用的方式为直接加载js,代码如下:
def scroll(driver): driver.execute_script(""" (function () { var y = document.body.scrollTop; var step = 100; window.scroll(0, y); function f() { if (y < document.body.scrollHeight) { y += step; window.scroll(0, y); setTimeout(f, 50); } else { window.scroll(0, y); document.title += "scroll-done"; } } setTimeout(f, 1000); })(); """)
直接将在网页界面加载js代码,使之进行从上往下的翻页,就我估算每翻一次业大约有20张图片被加载,因此要获取大约500张图片就需要循环翻页25次,要是10000张就需要500次,希望你的浏览器可以挺住
5、现在我们获得了有大量图片链接的html代码,现在我们要做的就是讲html的图片链接都筛选出来,使用正则表达式进行筛选会更加方便,函数如下:
def getimage(html): reg =r'<img[^>]*src\s*=\s*"([^"]*)"[^>]*>' imgre=re.compile(reg) imglist=re.findall(imgre,html) return imglist
从函数中可以看出正则的重要内容为以
def downloadimage(imglist): count=1 for img in imglist: try: urllib.urlretrieve(img,filename=u"E:/珍爱网图片/%s.jpg"%count) except Exception,e: print 'something si wroing:'+str(e) count+=1
很简单的代码就不细说了,就主要使用rulretrive()函数,注意使用异常捕获,要不只要有一个图片链接出现问题,那整个函数就断掉了
7、最后贴一下简单的成果(成果就不贴了笑哭了)
- 初等爬虫的学习过程1
- 苦逼的Python爬虫学习过程
- python爬虫学习过程
- 初等数论学习
- 学习struts的一个初等的小例子
- 学习struts的一个初等的小例子
- 线性代数学习笔记三:矩阵的初等变换与线性方程组
- [数学学习5]函数的运算、初等函数
- 学习爬虫过程中遇到的问题总结
- 矩阵的初等变换
- 矩阵的初等变换
- 初等数论1
- 线性代数:第三章 矩阵的初等变换与线性方程组(1)矩阵的初等变换 矩阵的秩
- python爬虫学习--pixiv爬虫(1)--p站爬虫的登录
- 费马大定理的初等解法
- 史上最难的初等几何问题?
- 小白学爬虫-----bs4的学习-1
- 爬虫的学习分析
- Disable Network Manager in Ubuntu
- Github全面详解-13解决文件冲突
- 只有mdf文件和ldf文件,怎么恢复数据库
- 行为型模式: 策略模式
- bzoj 3132 二维树状数组
- 初等爬虫的学习过程1
- Description Resource Path Location Type cvc-complex-type.2.4
- 性能监控的好工具
- 软件架构设计
- #.java实现九九乘法表
- Arm架构异常处理流程之中断
- Ubuntu下LAMP环境搭建 Apache、MySQL、PHP
- 手动配置 WIFI无线网络 (Ubuntu 16.04)
- Arm架构异常处理流程之缺页异常