初等爬虫的学习过程1

xiaoxiao2021-02-27  483

闲来无事,学习一下爬虫的编写过程,总归也算是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、最后贴一下简单的成果(成果就不贴了笑哭了)

转载请注明原文地址: https://www.6miu.com/read-795.html

最新回复(0)