tom-gao

什么是爬虫:

是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

 

采用python作为爬虫的优点:

大量第三方库,开发效率高,代码少,应用性广泛

 

网络爬虫的基本工作流程如下:

    1.首先选取一部分精心挑选的种子URL;

    2.将这些URL放入待抓取URL队列;

    3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

    4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

 

 

 

urllib模块

介绍:

urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据

 

 

实战例子

项目原理:打开网址-获取源码-找到图片-匹配下载

 

 

#coding=utf-8

\'\'\'

Created on 2017年1月28日

 

@author: gaojs

\'\'\'

import urllib,re,os

def getHtml():

    page=urllib.urlopen(\'http://www.wmpic.me/meinv/\').read()#打开网址并且读取

    return page

 

x=0

def getimg(page):

    imgre=re.compile(r\' src="(.*?)" class=\')

    imglist=re.findall(imgre,page)

    for imgurl in imglist:

#         print imgurl

        global x

        if not os.path.exists(\'/Users/gaojs/Desktop/pic\'):

            print os.mkdir(\'/Users/gaojs/Desktop/pic/\')

        else:

            urllib.urlretrieve(imgurl,\'/Users/gaojs/Desktop/pic/\'+\'%s.jpg\'%x)#下载图片到指定位置

            x+=1

            print u\'正在下载第%s张\'%x

       

 

l=getHtml()

getimg(l)

 

 

urllib2模块

urllib与urllib2区别

 

1.在python中,urllib和urllib2不可相互替代的。

2.整体来说,urllib2是urllib的增强,但是urllib中有urllib2中所没有的函数。

3.urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用urllib2.

4.urllib支持设置编码的函数,urllib.urlencode,在模拟登陆的时候,经常要post编码之后的参数,所以要想不使用第三方库完成模拟登录,你就需要使用urllib。

5.urllib一般和urllib2一起搭配使用。

6.urllib2解决禁止爬虫,模拟浏览器,加上头部信息headers

 

实战例子

#coding=utf-8

\'\'\'

Created on 2017年1月19日

 

@author: gaojunsong

爬取百度小说

\'\'\'

 

import re,urllib2

class BDTB:

    baseurl="http://tieba.baidu.com/p/4896490947?pn="

   

    def getpage(self,pageNo):

        url=self.baseurl+str(pageNo)

        request=urllib2.Request(url)#构造对象

        response=urllib2.urlopen(request).read()

        return response

    def gettitle(self,pageNo):

        html=self.getpage(pageNo)

        reg=re.compile(r\'title="【原创】(.*?)"\')

        items=re.findall(reg,html)

        for item in items:

            with open(\'a.txt\',\'w\')as tp:

                tp.write(\'标题\'+\'\t\'+\'<<\'+item+\'>>\')

        return items

    def getcontent(self,pageNo):

        html=self.getpage(pageNo)

        reg=re.compile(r\'class="d_post_content j_d_post_content ">            (.*?)</div><br>\',re.S)

        rq=re.findall(reg,html)

        for i in rq:

            removea=re.compile(\'<a.*?>|</a>\')

            removeb=re.compile(\'<img.*?>\')

            removec=re.compile(\'http.*?.html\')

            i=re.sub(removea,\'\',i)

            i=re.sub(removeb,\'\',i)

            i=re.sub(removec,\'\',i)

            i=i.replace(\'<br>\',\'\')

            i=i.replace(\'嗯,这是第二次开小说贴,肯定有人看过,看过的可以再看一次\',\'\')

            i=i.replace(\'随意镇\',\'\')

            with open(\'a.txt\',\'a\')as tp:

                tp.write(\'\n\n\'+i)

           

      

        return rq

      

l=BDTB()

for i in range(1,6):

    print \'正在读取第%s页小说\'%i

    l.getpage(i)

    l.gettitle(i)

    l.getcontent(i)

       

       

 

 

request模块

实战例子

对网址发送一个请求post/get,获取源码text和content

 

 

 

 

 

 bsp模块

bsp全称:BeautifulSoup(优势:不需要写正则表达式)

介绍:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

 

 实战例子

#例子:如何获取标签内容

#encoding=utf-8

from bs4 import BeautifulSoup

html=\'<title>welcome to gloryroad</title><div>join gloryroad soon<\div>\'

soup=BeautifulSoup(html,\'html.parser\')#解析方式

print soup.div

print soup.title

 

 

#如何打开文件获取内容

新建html文件,写入内容‘欢迎同学加入光荣之路测试开发班级,跟吴老一起学习’

#encoding=utf-8

from bs4 import BeautifulSoup

soup=BeautifulSoup(open(\'a.html\'),\'html.parser\')#解析方式

print soup.prettify()#打印本地文件内容,格式化打印内容

 

 

urllib urllib2 bsp综合案例

 实战例子

#encoding=utf-8

\'\'\'

爬取豆瓣网,美臀图片,并且存在指定目录下

用到的知识点,urllib,urllib2,bsp,shutil,os

\'\'\'

import urllib,urllib2,os

from bs4 import BeautifulSoup

import sys

from pip.index import Link

import shutil

reload(sys)

sys.setdefaultencoding(\'utf-8\')#输出的内容为utf-8格式

 

x=0

\'\'\'

判断目录是否存在,如果不存在则创建

如果存在,删除目录以及下面所有文件,避免重复下载

\'\'\'

if not os.path.exists(\'/Users/gaojs/Desktop/pigu\'):

        os.mkdir(\'/Users/gaojs/Desktop/pigu/\')

else:

    shutil.rmtree(\'/Users/gaojs/Desktop/pigu/\')#shutil比os好在于可以删除不为空的目录

    os.mkdir(\'/Users/gaojs/Desktop/pigu/\')

def spider(url):

    headers={\'User-Agent\':\'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\'}

    req=urllib2.Request(url,headers=headers)

    page=urllib2.urlopen(req,timeout=20).read()

    soup=BeautifulSoup(page,\'html.parser\')#解析方式parser

    my_girl=soup.find_all(\'img\')

    for girl in my_girl:

        link=girl.get(\'src\')

#         print link

        global x

        urllib.urlretrieve(link,\'/Users/gaojs/Desktop/pigu/\'+\'%s.jpg\'%x)#下载图片到指定位置

        x+=1

        print u\'正在下载第%s张\'%x

 

for page in xrange(1,3):

    page+=0

    url=\'http://www.dbmeinv.com/dbgroup/show.htm?cid=6&pager_offset=%s\'%page

    print \'第\'+str(page)+\'页\'

    spider(url)

   

spider(url)

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-11-09
  • 2019-09-02
  • 2021-04-05
  • 2021-08-05
  • 2021-08-30
  • 2021-08-19
猜你喜欢
  • 2021-12-22
  • 2021-12-30
  • 2021-11-13
  • 2021-12-22
  • 2021-07-02
  • 2022-12-23
相关资源
相似解决方案