Python爬虫————爬虫基础

Python爬虫————爬虫基础

一、爬虫概述
什么是爬虫?

爬虫就是抓取网页数据的程序。

网页三大特征:

1.网页都有自己的为唯一的URL(统一资源定位符)来进行定位;
2.网页都使用HTML(超文本标记语言)来描述页面信息;
3.网页都使用HTTP/HTTPS(超文本传输协议)来传输HTML数据。

爬虫设计思路

1.首先确定需要爬取的网页URL地址。
2.通过HTTP/HTTPS协议来获取对应的HTML页面。
3.提取HTML页面里有用的数据:
1)如果是需要的数据,就保存起来。
2)如果是页面的其他URL,继续执行第二步。

二、通用爬虫和聚焦爬虫
通用爬虫

通用网络爬虫 是 捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网 页下载到本地,形成一个互联网内容的镜像备份。

通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着 整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。
在这里插入图片描述

搜索引擎如何获取一个新网站的URL:
1. 新网站向搜索引擎主动提交网址:
2. 在其他网站上设置新网站外链
3. 和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。
通用爬虫的局限性
1.大多情况下,网页里90%的内容对用户来说都是无用的。
2. 搜索引擎无法提供针对具体某个用户的搜索结果。
3. 图片、数据库、音频、视频多媒体等不能很好地发现和获取。
4. 基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。

聚焦爬虫

聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页 抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

三、HTTP和HTTPS

HTTP协议-80端口
HyperTextTransferProtocol, 超文本传输协议是一种发布和接收HTML页面的方法。
HTTPS-443端口
HypertextTransferProtocoloverSecureSocketLayer, 简单讲是HTTP的安全版,在HTTP下加入SSL 层。

HTTP工作原理

网络爬虫抓取过程可以理解为模拟浏览器操作的过程。

浏览器发送HTTP请求的过程:

  1. 当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。

  2. 当我们在浏览器输入URLhttp://www.baidu.com的时候,浏览器发送一个Request请求去获取http://www.baidu.com的html文件,服务器把Response文件对象发送回给浏览器。

  3. 浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

  4. 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

URL

URL(Uniform/UniversalResourceLocator的缩写):统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
基本格式: scheme://host[:port#]/path/…/[?query-string][#anchor]
在这里插入图片描述

四、客户端HTTP请求

客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:在这里插入图片描述
在这里插入图片描述

请求方法Method

根据HTTP标准,HTTP请求可以使用多种请求方法.
HTTP0.9:只有基本的文本GET功能。
HTTP1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET,POST和HEAD方法。
HTTP1.1:在1.0基础上进行更新,新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
在这里插入图片描述

Get 和 Post 详解
  1. GET是从服务器上获取数据,POST是向服务器传送数据
  2. GET请求参数显示,都显示在浏览器网址上,即“Get”请求的参数是URL的一部分。
  3. POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,
常用的请求报头

Host: 主机和端口号
Connection : 客户端与服务连接类型, 默认为keep-alive
User-Agent: 客户浏览器的名称
Accept: 浏览器或其他客户端可以接受的MIME文件类型
Referer:表明产生请求的网页来自于哪个URL
Accept-Encoding:指出浏览器可以接受的编码方式。
Accept-Language:语言种类
Accept-Charset: 字符编码
Cookie:浏览器用这个属性向服务器发送Cookie
Content-Type:POST请求里用来表示的内容类型。
在这里插入图片描述
在这里插入图片描述

五、HTTP响应

HTTP响应由四个部分组成,分别是: 状态行 、 消息报头 、 空行 、 响应正文在这里插入图片描述

响应状态码

在这里插入图片描述
200: 请求成功
302: 请求页面临时转移至新url
307和304: 使用缓存资源
404: 服务器无法找到请求页面
403: 服务器拒绝访问,权限不够
500: 服务器遇到不可预知的情况

Cookie和Session

服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。在这里插入图片描述

六、BS4
BS4简介

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个
工具箱,通过解析文档为tiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。
你不需要考虑编码方式,除非文档没有指定一个编一下原始编码方式就可以了。

BS4的4种对象

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,
每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment
2-1. BeautifulSoup对象
2-2. Tag对象
Tag就是html中的一个标签,用BeautifulSoup就能解析出来Tag的具体内容,具体的格式为soup.name,其中name是html下的标签。

七、实例:图片下载器
制作爬虫的基本步骤
  1. 需求分析
  2. 分析网页源代码,配合F12
  3. 编写正则表达式或者其他解析器代码
  4. 正式编写python爬虫代码
需求分析

"我想要图片,我又不想上网搜“
“最好还能自动下载”
……

这就是需求,至少要实现两个功能,一是搜索图片,二是自动下载。

pic_url = re.findall(’“objURL”:"(.*?)",’,html,re.S)

代码实现

"""
图片下载器
"""
# -*- coding:utf-8 -*-

import re
import requests
import os
def downloadPic(html, keyword):
    """
    :param html: 页面的源代码
    :param keyword: 搜索的关键字
    :return:
    """
    # (.*?)代表任意多个字符
    # ()代表分组, 值返回符合条件的字符串中括号里面的内容;
    pic_url = re.findall('"objURL":"(.*?)",', html, re.S)[:5]
    count = 0
    print('找到关键词:' + keyword + '的图片,现在开始下载图片...')

    # each 是每个图片的url地址
    for each in pic_url:
        try:
            headers = {
                'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) '
                              'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 '
                              'Mobile Safari/537.36'}
            # 获取指定图片的相应对象;
            response = requests.get(each, timeout=10, headers=headers)
        except requests.exceptions.ConnectionError:
            print('【错误】当前图片无法下载')
            continue
        except Exception as e:
            print('【错误】当前图片无法下载')
            print(e)
            continue
        else:
            # print(response.status_code)
            if response.status_code != 200:
                print("访问失败: ", response.status_code)
                continue
        #   ******** 存储图片到本地*******************************
        if not os.path.exists(imgDir):
            print("正在创建目录 ", imgDir)
            os.makedirs(imgDir)

        posix = each.split('.')[-1]
        if posix not in ['png', 'jpg', 'gif', 'jpeg']:
            break
        print('正在下载第' + str(count + 1) + '张图片,图片地址:' + str(each))
        name = keyword + '_' + str(count) + '.' + posix
        filename = os.path.join(imgDir, name)
        count += 1
        with open(filename, 'wb') as f:
            # response.content: 返回的是二进制文本信息
            #  response.text:返回的字符串文本信息
            f.write(response.content)


if __name__ == '__main__':
    imgDir = 'pictures'
    word = input("Input key word: ")
    url = 'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=' + word
    try:
        response = requests.get(url)
    except Exception as e:
        print(e)
        content = ''
    else:
        content = response.text

    downloadPic(content, word)
  • 11
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 爬虫实现,用于从北京租房信息网站上爬取租房信息并将其导入到 Excel 文件中。 首先,我们需要安装以下 Python 库: - requests:用于发送 HTTP 请求和获取网页内容。 - Beautiful Soup:用于解析 HTML 和 XML 网页内容。 - openpyxl:用于操作 Excel 文件。 可以使用 pip 命令进行安装: ``` pip install requests beautifulsoup4 openpyxl ``` 接下来,我们需要编写 Python 代码: ```python import requests from bs4 import BeautifulSoup from openpyxl import Workbook # 发送 HTTP 请求并获取网页内容 url = 'https://bj.zu.anjuke.com/fangyuan/p1/' response = requests.get(url) html = response.text # 使用 Beautiful Soup 解析网页内容 soup = BeautifulSoup(html, 'html.parser') houses = soup.select('.zu-itemmod') # 创建 Excel 文件并添加表头 wb = Workbook() ws = wb.active ws.append(['标题', '链接', '小区', '面积', '租金']) # 遍历租房信息并将其添加到 Excel 文件中 for house in houses: title = house.select('.zu-info h3 a')[0].text.strip() link = house.select('.zu-info h3 a')[0]['href'] community = house.select('.details-item')[0].text.strip() area = house.select('.details-item')[1].text.strip() price = house.select('.zu-side strong')[0].text.strip() ws.append([title, link, community, area, price]) # 保存 Excel 文件 wb.save('beijing_rent.xlsx') ``` 该爬虫程序将会从北京租房信息网站的第一页开始爬取租房信息,包括标题、链接、小区、面积和租金,并将其添加到 Excel 文件中。你可以根据需要修改代码以实现更多功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值