zoukankan      html  css  js  c++  java
  • 会 python 的一定会爬虫吗,来看看

    文章更新于:2020-02-18
    注:python 爬虫当然要安装 python,如何安装参见:python 的安装使用和基本语法

    一、什么是网络爬虫

    网络爬虫就是用代码模拟人类去访问网站以获取我们想要信息。由于代码模拟的速度和效率很高,所以可以批量和动态获取我们想要的信息。比如抢票软件就是一直用代码访问12306网站获取余票信息,一有余票立马使用代码进行模拟购买。

    二、网络爬虫的分类

    1. 通用网络爬虫。又称全网爬虫,爬行对象从一些种子URL扩充至整个Web,主要为门户站点、搜索引擎和大型Web服务提供商采集数据。
    2. 聚焦网络爬虫。是指有选择性的爬行哪些与预定主题相关页面的网络爬虫。
    3. 增量式网络爬虫。是指对已下载网页采取增量式更新的爬虫,只爬行发生更新的网页,减少了数据下载量。
    4. 深层网络爬虫。深层网页是指只有用户提交一些关键词才能获取的Web页面,隐藏在搜索表单后的。

    三、网络爬虫的架构

    1. URL管理器:放置重复抓取和循环抓取。
    2. 网页下载器:用于下载网页,爬虫的核心部分之一。
    3. 网页解析器:用于提取网页中自己想要的数据,爬虫的另一个核心部分。
    4. 输出管理器:用于保存信息,将数据输出到文件或数据库。

    四、爬虫如何工作

    1、举个爬虫的例子,我们访问百度官网

    import requests				//导入requests包
    #这个包需要提前安装,在cmd 里面进入 python 安装路径的 Scripts 目录输入 pip install lxml 进行安装
    from lxml import etree		//导入etree包
    
    
    url = "https://www.baidu.com/"
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
    
    r = requests.get(url,headers=headers);
    r.encoding = 'utf-8'
    selector = etree.HTML(r.text)
    
    news_text = selector.xpath('//*[@id="u1"]/a[1]/text()')[0]
    news_url = selector.xpath('//*[@id="u1"]/a[1]/@href')[0]
    print(news_url)
    print(news_text)
    

    说明如下

    行数 说明
    第1行 导入requests包,用于使用get访问命令
    第2行 导入etree包,用于使用xpath命令以找到自己想要的元素
    第4行 设置我们想要访问的url
    第5行 设置访问头部信息headers,用于模拟浏览器访问
    第7行 执行访问,并将获取的数据刚到r对象中
    第8行 r对象的编码方式设置为utf-8
    第9行 etree解析r对象数据并放到selector
    第11行 获取从根目录下找到id='u1’属性下的a标签的text内容
    第12行 获取从根目录下找到id='u1’属性下的a标签的href内容
    第13行 输出第11行获取的数据
    第14行 输出第13行获取的数据

    结果如下

    http://news.baidu.com
    新闻
    

    五、如何定位元素

    定位元素
    在HTML页面上右键、检查即可定位到HTML代码相应位置。
    代码相应位置
    同时,在代码上右键、Copy、Copy XPath即可复制XPath地址。

    初始化HTML源码

    XPath即为XML路径语言,它是一种用于确定XML文档中某部分位置的语言。
    如在代码中使用此功能需要导入lxml中的etree

    from lxml import etree
    

    然后使用HTML源码初始化etree,并赋值给一个对象以保存

    selector = etree.HTML(r.text)
    

    这样我们就得到了一个名字叫做selectorElement对象,这时我们可以对这个Element对象进行XPath筛选,系统会返回一个筛选的结果列表。

    使用标签顺序定位

    比如我们要查找第一个div下的第二个ul下的a标签

    all_a = selector.xpath('//div[1]/ul[2]/a')
    

    //表示从根节点开始查找,然后找到第二个ul下的所有a标签。
    ==注意:==这里的数字是从1开始的,而不是从0开始的。

    用属性定位

    而同时,我们也可以通过属性查找元素。

    li_good = selector.xpath('//ul/li[@[class="good"]')
    

    上述代码可以找到ul下所有class属性为good的li标签。

    用唯一属性全局定位

    当然,如果class属性唯一,也可以直接中根目录开始查找。

    li_good = selector.xpath('//*[@[class="good"]')
    

    上述代码的意思是:从根目录下开始查找class属性为good的所有标签。*代表任意的标签。

    提取属性值

    li_good_text = selector.xpath('//*[@[class="good"]/a/@href')
    

    这里通过@href语法形式提取到了a标签的属性值。

    六、一些注意事项

    import requests
    response = requests.get(“https://www.baidu.com”)

    这里可以通过

    response.encoding

    来查看返回值response的编码
    通过

    response.encoding = “utf-8”

    来修改返回值response的编码
    还可以通过

    response.headers

    来查看返回值response的头部
    而请求头部则可以通过

    response.request.headers

    来查看

    列表如下:

    代码 说明
    response.encoding 查看返回值的编码
    response.encoding = “utf-8” 修改返回值的编码
    response.headers 查看返回头部
    response.request.headers 查看请求头部
    response.status_code 查看返回状态码
    response.history 查看重定向

    1、添加参数

    payloag = {‘q’:‘pythoh’,‘cat’:‘10001’}
    r = requests.get(url,headers=headers,params=payload)

  • 相关阅读:
    linux内核分析第八周理解进程调度时机跟踪分析进程调度与进程切换的过程
    linux内核分析第六周分析Linux内核创建一个新进程的过程
    Linux内核学习总结
    Linux内核分析第一周通过分析汇编代码理解计算机是如何工作的
    linux内核分析第五周分析system_call中断处理过程
    linux内核分析第三周跟踪分析Linux内核的启动过程
    转载:Understanding WPF Application Lifecycle
    Quick Sort 快速排序
    C#中的Immutable(不变的)
    一个lock和一个deadlock的例子
  • 原文地址:https://www.cnblogs.com/amnotgcs/p/12694416.html
Copyright © 2011-2022 走看看