当前位置: 首页 > news >正文

小学生python编程----学爬虫

目录

基础知识

1、请求网页

爬虫用到的requset库,可以模拟人类打开网页,获取网页的行为。这个过程叫"请求网页"。

2、获取网页文本

3、分析网页网页代码是由一个个标签组成的,大多数都成对出现。

4、变为解析对象bs4库:用来解析爬取的网页,提取信息。

5、获取内容

data保存获取到的内容,是一个列表。

6、获取标签文字标签.text方法:获取标签中的文本信息。

7、示例


基础知识

网络爬虫(又称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取互网联信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序.

爬虫又叫网络爬虫(web Spider),网络像一张大网,上面布满"数据"。爬虫就是从网上获取数据的"程序蜘蛛"。

步骤:请求网页-分析网页-展示结果


1、请求网页


爬虫用到的requset库,可以模拟人类打开网页,获取网页的行为。这个过程叫"请求网页"。

requset中的get()方法是进入网站的"法宝"。

request库使用get()来获取网页信息,并输出response对象名和状态码,表示成功获取到了网页。

get("url")函数:get函数用于请求网页,URL是需要请求的网址。

UTF-8:编码格式,避免中文乱码

直接输出get获取的内容,是网页对象名和状态码,其中200是状态码--表示网页请求成功。

代码:

# 爬取网页内容
import requests
response = requests.get("https://www.baidu.com/“)
response.encoding = "UTF-8"
print(response)

如没有安装requests模块,要先安装他 pip install requests
输出结果:

E:\乐乐python\venv\Scripts\python.exe E:/乐乐python/思成/爬虫/读百度.py
<Response [200]>

进程已结束,退出代码 0

2、获取网页文本


网页对象.text:获取网页的文本。

格式1:

response = requests.get()

response.text

格式2:

response = requests.get().text

注意text后不加括号

import requests
response = requests.get("https://www.baidu.com/")
response.encoding = "UTF-8"
mytext=response.text
print(mytext)

结果:

E:\乐乐python\venv\Scripts\python.exe E:/乐乐python/思成/爬虫/读百度2.py
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');
                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

3、分析网页
网页代码是由一个个标签组成的,大多数都成对出现。

alt 网页代码标签

从网页代码中找信息的过程叫做“解析网页”。

4、变为解析对象
bs4库:用来解析爬取的网页,提取信息。

soup是变量名,用来存储解析之后的内容。response.text表示网页文本。lxml表示解析器。

我们可以把创建的对象soup看作是由代码组成的汤。想要提取“汤”中的内容还要借助勺子--“lxml”。import bs4
soup = bs4.beautifulSoup(response.text,"lxml")


5、获取内容

data保存获取到的内容,是一个列表。

参数name和属性可以根据需要选择使用一个或多个。

常用的属性有id、class_。

data = soup.find_all(name="属性名",属性="属性值")

6、获取标签文字
标签.text方法:获取标签中的文本信息。

格式: data = <标签名>文本信息</标签名> data.text

注意: response.text表示获取字符串格式的网页代码。

这里的data是一对标签,data.text获取标签内容

7、示例


代码:

# 爬取网页新闻

import requests, bs4, time
response = requests.get("https://icourse.xesimg.com/programme/static/py/pcdata/lw-web/新闻网站/index.html")
response.encoding = "UTF-8"
soup = bs4.BeautifulSoup(response.text, "lxml")
data1 = soup.find_all(name="div", attrs={'class': 'article'})

for n in data1:
    data2 = n.find_all(name="a")
    print("--------------------------------------")
    print("题目:"+data2[0].text)
    print("摘要:"+data2[1].text)
    print("主题:"+data2[2].text)

运行结果:

运行上述代码如出错:

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?需安装下:pip install lxml

8、状态码 response.status_code
response.status_code:用来获取网页当前的状态

response = request.get("url")

response.status_code

状态码    网页状态
404    找不到网页啦
200    成功找到网页
403    网页禁止访问
503    现在打不开网页,需等待

相关文章:

  • 如何用一个简单的内容升级心理学技巧将转化率提高了845%
  • 【LeetCode】Day126-正则表达式匹配
  • 09-排序2 Insert or Merge(浙大数据结构)
  • DPDK18.08上对VIRTIO IN ORDER 功能所做的优化
  • java毕业设计软件S2SH人力资源管理系统|人事薪资招聘oa人力请假考勤工资[包运行成功]
  • 关于C/C++中const关键字作用的一些想法
  • STC15单片机-通过PWM调整灯亮度
  • 9.3DDD之集成事件
  • 抖音获取商品原数据API接口展示
  • C++ 删除链表的倒数第N个结点
  • Pinia的使用
  • java — 认识String类的常用方法(上)
  • 高速专线不打烊 DPDK Hotplug助你实现设备动态管理
  • 【数据结构 二叉树 递归与非递归遍历】
  • 微信公众号消息推送教程
  • axios 和 cookie 的那些事
  • echarts花样作死的坑
  • httpie使用详解
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • JDK 6和JDK 7中的substring()方法
  • php ci框架整合银盛支付
  • ReactNative开发常用的三方模块
  • Sequelize 中文文档 v4 - Getting started - 入门
  • spring学习第二天
  • yii2权限控制rbac之rule详细讲解
  • 从0到1:PostCSS 插件开发最佳实践
  • 回流、重绘及其优化
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 那些年我们用过的显示性能指标
  • 什么软件可以剪辑音乐?
  • 思否第一天
  • 微信公众号开发小记——5.python微信红包
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • ​configparser --- 配置文件解析器​
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​flutter 代码混淆
  • ​如何防止网络攻击?
  • $ git push -u origin master 推送到远程库出错
  • (C#)获取字符编码的类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (LeetCode) T14. Longest Common Prefix
  • (libusb) usb口自动刷新
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • .cfg\.dat\.mak(持续补充)
  • .Net 4.0并行库实用性演练
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net项目IIS、VS 附加进程调试
  • /proc/stat文件详解(翻译)
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]