笔记-Python爬虫技术基础及爬取百度新闻

news2024/11/24 10:48:57

笔记-Python爬虫技术基础及爬取百度新闻

    • 1.1查看网页源代码
    • 1.2网页结构初步了解
    • 1.3HTML基础知识
      • 1.标题`<h>`标签:
      • 2.段落`<p>`标签:
      • 3.链接`<a>`标签:(定义链接)
      • 4.区块:
      • 5.类(class)与 ID
    • 1.4百度新闻源代码获取
      • 1.4.1获取网页源代码
      • 1.4.2分析网页源代码信息
    • 1.5正则表达式
      • 1.5.1findall()函数
      • 1.5.2非贪婪匹配之(.*?)
      • 1.5.3非贪婪匹配之 .*?
      • 1.5.4自动考虑换行的修饰符re.S
    • 实例-百度新闻爬虫

1.1查看网页源代码

F12弹出来的东西叫做开发者工具,是进行数据挖掘的利器,对于爬虫来说,只需要会用下图的这两个按钮即可。
(1)选择按钮
在这里插入图片描述
点击一下它,发现它会变成蓝色,然后把鼠标在页面上移动移动,会发现页面上的颜色机会发生改变。当移动鼠标的时候,会发现界面上的颜色会发生变化,并且Elements里的内容就会随之发生变化。
(2) Elements元素按钮:
在这里插入图片描述
“Elements”选项卡里面的内容可以理解为就是网页的源代码,最后爬虫爬到的内容大致是这样。
另外一个获取网页源码的方式是在网页上右击选择“查看网页源代码”。

1.2网页结构初步了解

结构其实很简单,就是一个大框套着一个小框,一个小框再套着一个小小框,一般文本内容都是在最后的小框里
前两行的
在这里插入图片描述

<!DOCTYPE html><html>是固定写法,作用是将代码声明为HTML文档。
<body>框表示主体信息,是最终展示在网页上的内容。<>包围起来的内容就是标签,例如,<body>读作body标签。通常写完<body>之后,最后得写一个</body>,表示一个框的闭合。
如果网页出现乱码(乱码就是中文显示成奇怪的符号),可以把charset="utf-8"中的utf-8改成gbk,这是两种不同的中文格式,各个浏览器可能各有不同。

1.3HTML基础知识

1.标题<h>标签:

标题是通过<h1> - <h6> 标签来定义的,一般格式为:<h1>标题内容</h1>。其中h1的字号最大,h6的字号最小。

2.段落<p>标签:

段落是通过标签 <p> 来定义的,一般格式为:<p>段落内容</p>

3.链接<a>标签:(定义链接)

链接是通过标签 <a> 来定义的,一般格式为:<a href="链接地址">文本内容</a>。如果想在一个新的标签页里打开百度首页,而不是把原网页覆盖了话,只要在”链接地址”的后面加上target=_blank即可
还有些常用的标签:定义表格的label标签、定义序号的<li>标签、定义图片的<img>标签、定义样式的<script>标签等

4.区块:

在这里插入图片描述

区块最主要的表现形式就是<div>**</div>格式了,例:可以看到每个新闻都被包围在一个叫做<div class ="result" id="*">***</div>的框里,更加学术的说法来讲,这个<div>**</div>其实起到了一个分区的作用,将百度新闻上这10条新闻分别放置了10个区域中

5.类(class)与 ID

  1. 类 (class): class的写法就是写在框的类型后面,比如<h3 class="c-title">以及<div class="result" id="1">.
  2. ID:id的区分作用则更加每个class(类)可能相同,但是他们的id一般都不会相同

1.4百度新闻源代码获取

1.4.1获取网页源代码

在这里插入图片描述

通过requests库来尝试获取下百度新闻的网页源代码,代码如下:
在这里插入图片描述

获取到的源代码如下图所示:
可以看到其并没有获取到真正的网页源代码,这是因为这里的百度资讯网站
只认可浏览器发送过去的访问,而不认可直接通过Python发送过去的访问请求。
在这里插入图片描述

这时就需要设置下requests.get()中的headers参数,用来模拟浏览器进行访问。
在这里插入图片描述

运行结果如下图所示,可以发现此时已经获取到网页的源代码了:
这里的headers是一个字典,它的第一个元素的键名为’User-Agent’,值为’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’。User-Agent实际上代表访问网站的浏览器是哪种浏览器。以谷歌浏览器为例讲解如何获取浏览器的User-Agent。打开谷歌浏节器,在地址栏中输入“about:version”,注意要用英文格式的冒号,按Enter键后在打开的界而中找到“用户代理”项,后面的字符串就是User-Agent.
对于之后的实战,只要记得在代码的最前面写上如下代码:
headers = {‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’}
然后每次用requests.get()访问网站时,加上headers=headers即可。
res = requests.get(url, headers=headers).text

1.4.2分析网页源代码信息

三法之1: (1)F12方法:使用 选择按钮 和Elements
在这里插入图片描述

三法之1: (2)使用2.1.2介绍的右击选择“查看网页源代码”
然后便可以通过Ctrl + F快捷键(快速搜索快捷键)定位关心的内容了。
三法之1: (3)在Python获得的网页源代码中查看
然后便可以通过Ctrl + F快捷键(快速搜索快捷键)定位关心的内容了。

1.5正则表达式

1.5.1findall()函数

正则表达式库re
Findall()函数的功能是在原始文本中寻找所有符合匹配规则的文本内容,其使用格式如下所示:re.findall(匹配规则,原始文本),匹配规则是由一个特定符号组成的字符串。findall()函数得到的是一个列表。
在这里插入图片描述

‘\d’表示匹配一个数字,‘\d\d\d’就表示匹配三个数字

1.5.2非贪婪匹配之(.*?)

在这里插入图片描述

简单来说**(.?)的作用就是来找到想要的内容,同时不确定它的长度以及格式**,但是知道它在哪两块内容中间。其使用格式如下所示:**文本A(.?)文本B**

1.5.3非贪婪匹配之 .*?

如果说**(.?)是用来获取**文本A与文本B之间的内容;.?的作用简单来说是表示文本C和文本D之间的内容。之所以要使用.*?,是因为文本C和文本D之间的内容经常变动或没有规律,无法写到匹配规则里;或者文本C和文本D之间的内容较多,我们不想写到匹配规则里。

1.5.4自动考虑换行的修饰符re.S

修饰符有很多,用的最多的就是re.S,它的作用就是在findall查找的时候,可以自动考虑到换行的影响,使得.*?可以匹配换行,使用格式如下:
re.findall(匹配规则,原始文本,re.S)
在这里插入图片描述

获取的标题里包含了\n换行符,可以利用strip()函数清除换行符,代码如下:
在这里插入图片描述

注:如果想把title里的给去掉,我们可以是原来学过的.replace

  1. sub()函数
    在这里插入图片描述

sub()函数中的sub是英文substitute(替换)的缩写,其格式为:re.sub(需要替换的内容,替换值,原字符串),该函数主要用于清洗正则表达式获取到的内容。
这个方法不自会去掉<em></em>,还会去掉其它的<>里的内容。

  1. 中括号[ ]的用法

中括号最主要的功能是使中括号里的内容不再有特殊含义。在正则表达式里,“.”“*”“?”等符号都有特殊的含义,但是如果想定位的就是这些符号,就需要使用中括号。

实例-百度新闻爬虫

import requests
import re
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}

def baidu(keyword, page):  # 定义函数,方便之后批量调用
    num = (page - 1) * 10
    url = 'https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=' + keyword + '&pn=' + str(num)
    res = requests.get(url, headers=headers).text  # 通过requests库爬虫
 
    # 正则提取信息
    p_href = '<h3 class="c-title">.*?<a href="(.*?)"'
    p_title = '<h3 class="c-title">.*?>(.*?)</a>'
    p_info = '<p class="c-author">(.*?)</p>'
    href = re.findall(p_href, res, re.S)
    title = re.findall(p_title, res, re.S)
    info = re.findall(p_info, res, re.S)

    # 数据清洗
    source = []
    date = []
    for i in range(len(title)):
        title[i] = title[i].strip()
        title[i] = re.sub('<.*?>', '', title[i])
        info[i] = re.sub('<.*?>', '', info[i])
        source.append(info[i].split('&nbsp;&nbsp;')[0])  
        date.append(info[i].split('&nbsp;&nbsp;')[1])
        source[i] = source[i].strip()
        date[i] = date[i].strip()
 
    # 通过字典生成二维DataFrame表格   
    result = pd.DataFrame({'关键词': keyword, '标题': title, '网址': href, '来源': source, '日期': date})
    return result
 
# 通过pandas库将数据进行整合并导出为Excel
import pandas as pd  
df = pd.DataFrame()
 
keywords = ['华能信托', '人工智能', '科技', '体育', 'Python', '娱乐', '文化', '阿里巴巴', '腾讯', '京东']
for keyword in keywords:
    for i in range(10):  # 循环10遍,获取10页的信息
        result = baidu(keyword, i+1)
        df = df.append(result)  # 通过append()函数添加每条信息到df中
        print(keyword + '第' + str(i+1) + '页爬取成功')

df.to_excel('新闻_new.xlsx')  # 在代码所在文件夹生成EXCEL文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在深圳宝安石岩路过一座关帝宫

​不管是在我老家还是这几年深漂&#xff0c;关帝爷的庙宇我还真没见过的。今天带娃骑行宝安石岩罗租村逛&#xff0c;居然看到一座古色古香的房子&#xff0c;走进一看原来这是关帝宫啊&#xff01;敬仰之情油然而生。 ​关帝宫和附近的小产权房紧凑在一起&#xff0c;但是现在…

探索人工智能在大规模采用电动汽车的时代将解决电力供需难的问题

1.导言 论文地址&#xff1a;https://arxiv.org/abs/2404.12520 随着电动汽车&#xff08;EV&#xff09;的普及&#xff0c;高峰期的用电需求可能会大幅增加。因此&#xff0c;如何适当控制电动汽车充电并尽量减少高峰期的用电量是一项重要挑战。传统上&#xff0c;基于模型和…

编程练习3 密码输入检测

#include<iostream> #include<vector> #include<string>using namespace std;// 判断字符是否为小写字母 bool isLower(char ch) {return ch > a && ch < z; }// 判断字符是否为大写字母 bool isUpper(char ch) {return ch > A && …

2024.10.8号培训计算机及外部设备装配调试员

1.理论 &#xff08;1&#xff09;电脑的种类&#xff1a;台式机&#xff1a;台式电脑&#xff0c;是一种各功能部件相对独立计算机&#xff0c;又分品牌机和兼容机。 &#xff08;2&#xff09;笔记本电脑&#xff1a;手提电脑或者膝上型电脑&#xff0c;是一种体积小&#…

【C++】内存管理,RALL原则和智能指针

1 C资源管理 C资源管理是确保程序运行效率和稳定性的关键。资源管理涉及变量、参数的存储和生命周期控制&#xff0c;以及动态内存的分配和释放。C通过一套内存管理机制来实现资源的有效分配和管理。 1.1 内存管理 为适用不同场景&#xff0c;C提供了多种内存管理方式&#…

基于Springboot+Vue的校园消费点评系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

大顶堆优化dp,带限制的子序列

前言&#xff1a;看到这个题目的时候我们可以用大顶堆记录前面的最大值&#xff0c;这样我们转移的时候就少了很多繁琐的查询 题目地址 class Solution { public:int constrainedSubsetSum(vector<int>& nums, int k) {int n nums.size();vector<int> ans nu…

论文Idea | 人工智能与建筑的交叉领域探索

在人工智能&#xff08;AI&#xff09;与建筑领域的交叉研究中&#xff0c;学者们探索了如何利用AI技术优化建筑设计、施工、管理以及运营等各个环节。以下是关于这一交叉领域的一些关键内容、研究方向、代表性论文及资源。 1.人工智能在建筑领域的应用概述 人工智能技术的快速…

Dev-Cpp 5.11 安装教程【保姆级】

目录 1. 准备软件安装包 2. 软件安装 3. 软件使用过程中必备的预先设置 写在前面 1. 如果你的电脑是Win 7&#xff0c;建议安装Dev-Cpp 5.11&#xff0c;解决软件和系统的兼容问题。具体安装步骤按照本教程进行即可。 2. 如果你的电脑是Win 10&#xff0c;建议安装Embarca…

QML6 项目生成缓存文件取消办法

有时候我们创建QML项目会在 C:\Users\85720\AppData\Local 文件夹下生成临时缓存文件&#xff0c;不注意的话&#xff0c;文件会越来越多&#xff0c;很烦人。 可以试试通过下面方法取消生成qml缓存文件&#xff0c;配置-》构建和运行 这里选 Use qmlcachegen: 禁用

java web 之过滤器Filter

1、概念 当访问服务器的资源时&#xff0c;Filter过滤器可以将请求拦截下来&#xff0c;完成一些特殊的功能。 通常都是用来拦截request进行处理的&#xff0c;也可以对返回的response进行拦截处理。 一般用于完成通用的操作。如&#xff1a;登录验证、统一编码处理、敏感字…

丰田,也杀入料箱AGV市场

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 在全球仓储自动化领域的竞争日益激烈之际&#xff0c;一场引人注目的合作正在悄然展开。 丰田旗下的物料搬运巨头范德兰德(Vanderlande)…

NSSCTF-WEB-pklovecloud

目录 前言 正文 思路 尝试 结尾 前言 许久未见,甚是想念. 今天来解一道有意思的序列化题 正文 思路 <?php include flag.php; class pkshow {function echo_name(){return "Pk very safe^.^";} }class acp {protected $cinder;public $neutron;public $…

安当数据库透明加密组件:守护您的 ClickHouse 数据安全

数据库简介 ClickHouse 是一款高性能的列式数据库管理系统&#xff0c;专为在线分析处理&#xff08;OLAP&#xff09;设计。它以其卓越的查询性能、强大的 SQL 支持和灵活的可扩展性&#xff0c;在大数据分析领域广受赞誉。无论是实时数据分析、业务智能还是广告技术&#xf…

栈溢出0x0D ret2_dl_runtime_resolve

实际上&#xff0c;dl_runtime_resolve 是通过最后的 字符串 来确定执行那一个函数的&#xff0c;也就是说&#xff0c;可以通过控制这个地址的内容来执行任意函数&#xff0c;比如&#xff1a;system 而 reloc_arg 是我们可控的&#xff0c;我们需要控制reloc_arg 间接控制 最…

【096】基于SpringBoot+Vue实现的私人健身与教练预约管理系统

系统介绍 视频演示 基于SpringBootVue实现的私人健身与教练预约管理系统 文档 PPT 源码 数据库脚本 课程设计 基于SpringBootVue实现的私人健身与教练预约管理系统采用前后端分离的架构方式开发&#xff0c;系统整体设计了管理员、教练、用户三种角色&#xff0c;实现了用户查…

根据Vue对比来深入学习React 下 props 组件传值 插槽 样式操作 hooks 高阶组件 性能优化

文章目录 函数组件的特点props组件间的传值父传子看上例子传父兄弟组件传值祖先组件传值 插槽基础插槽具名插槽作用域插槽 样式操作**CSS Modules** 生命周期useRef常用hookuseStateuseEffectuseContextuseReduceruseMemouseCallback 高阶组件什么时候使用 react性能问题和优化…

LeetCode讲解篇之2266. 统计打字方案数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们使用逆向思维发现如果连续按存在三个字母的按键&#xff0c;最后一个按键表示的字母可以是某个字母连续出现一次、两次、三次这三种情况的方案数之和 我们发现连续按存在三个字母的按键&#xff0c;当连续按…

数据治理中的核心 元数据

数据治理中的核心元素——元数据 一、关于元数据 1、什么是元数据 元数据&#xff08;metadata&#xff09;是关于数据的组织、数据域及其关系的信息&#xff0c;简单来说&#xff0c;元数据就是被用来描述数据的数据。 概念阐述总归生涩&#xff0c;下面用几个简单的例子来…