天天看点

从零开始学爬虫1

爬虫

爬虫的概念

络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

爬虫的步骤

  1. 准备目标站点的地址,然后在浏览器上分析一下网站
  2. 网络请求,下载网站源代码
  3. 从源码中解析你想要的内容
  4. 保存内容
  5. 整理数据结果

创建项目,开始最简单的爬虫

#目标站点的地址
url='https://www.i4.cn/wper_1_0_0_1.html'
           
#引入网络请求的库
from urllib import request
           
#进行网络请求,返回响应对象
resp=request.urlopen(url)
#读取响应体
content=resp.read()
print(content)
           

因为在写爬虫的时候,经常会遇到有反爬虫机制,对爬去速度和次数都有影响,所以,我们在爬取时最好爬一次,然后保存到本地

# 打开或者创建一个文件
    file = open('i4.html', 'w', encoding='utf-8')
    # 把下载的源码保存到本地
    content = str(content, encoding='utf-8')
    file.write(content)
           

保存到本地之后,上面请求和下载就不用再执行了,我们一般封装为一个方法,在我们再次需要请求的时候再调用,那么完整的代码:

def install():
    # 目标站点的地址
    url = 'https://www.i4.cn/wper_1_0_0_1.html'
    # 进行网络请求,返回响应对象
    resp = request.urlopen(url)
    # 读取响应体
    content = resp.read()
    print(content)
    # 打开或者创建一个文件
    file = open('i4.html', 'w', encoding='utf-8')
    # 把下载的源码保存到本地
    content = str(content, encoding='utf-8')
    file.write(content)
    pass
           

解析内容

我们要先从本地读取内容

#读取本地的内容
    file = open('i4.html', 'r', encoding='utf-8')
    content=file.read()
           

对内容进行解析,需要一个解析工具,常用的几个有:bs4 、pyquery两种解析库,也可以xpath解析,或者用正则表达式,初学者使用bs4比较简单,引入bs4库,这个库是第三方,需要先下载,下载方式:

1: 在命令行中 输入 pip install bs4

2: pycharm开发工具也有下载的地方:

file — settings

从零开始学爬虫1

点右上角+ 号 ,出来下一个界面

从零开始学爬虫1

输入你要的库,点左下角的下载即可,等待下载完成

那么接下来,就可以进行解析

#获取解析工具的对象:参数是要解析的内容和解析的规则
    soup= BeautifulSoup(content,'html.parser')

接下来根据id或者class或者其他属性,一级一级往下找自己想要的内容
           
#getElementsByClassName(),根据class找,返回值为列表
    # ibox=soup.select('.ibox')[0]
    #     #     # print(ibox)
    # ibox=soup.select('#wper')
    # print(ibox)
    #select()参数无论是id还是class,返回值都是列表
    #select_one('')参数无论是id还是class,返回值都是单个
    ibox=soup.select_one('#wper')
    #jbox=soup.find(attrs={'class':'jbox'})
    jbox=soup.find(class_='jbox')
    kbox=jbox.find(class_='kbox')
    list=kbox.find_all(class_='list')
    for item in list:
        img=item.select_one('.wper_img')
        #获取标签某个属性的值
        imgUrl=img['src']
        print(imgUrl)
           

在这里,bs4有几种查找的方法:find find_all select select_one

注意使用方式就行

下载:直接可以用request下载,第一个是图片地址,第二个是保存的路径

savePath=name+'.jpg'
  request.urlretrieve(imgUrl,savePath)