爬虫学习 | 03 爬虫静态网页的爬取(1)

news2024/11/16 10:54:18

学习的资料是:python chatgpt 网络爬虫从入门到精通

目录

Step1:基本的环境

Step2:ai辅助解决问题实现代码功能:

Step3:网页的初步分析:

Step4:静态网页的爬取

爬取信息:

实操:


Step1:基本的环境

单独创建一个爬虫的虚拟环境,隔离开其他的工作

如果不能这样做可以直接下载python 3.11的版本即可

输入y即可:

创建完成:

Vscode里面选择刚才创建的环境:

检查一下都有什么库:

下载爬虫所需要的:

pip install requests selenium beautifulsoup4 pandas

如果下载的很慢记得用镜像

pip install requests selenium beautifulsoup4 pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

测试一下python的编程环境:

接下来就是python的一些基本操作,没有学过的可以看看书,我们跳到ai辅助编程,看看书本是怎么系统讲解的:

Step2:ai辅助解决问题实现代码功能:

好的我看了,这个书不如自己的好用,他竟然用文心一下辅助编程,,,其实我们可以下载一些可以嵌入vs code的小工具,比如通义灵码。

书中还介绍了如何写提示词prompt,建议B站去看一下速成,会更有趣易懂����

Step3:网页的初步分析:

  1. 查看源码:crtl+u

Ctrl+F在页面打开搜索框,方便快速定位自己想要了解的内容

开发者工具

<F12> 或者 ctrl+shift+i

可以更改试图:

右键,检查,开发者工具中会快速跳转到对应位置:

判断网页类型:

加载内容判断:不断加载新的内容,网址始终不变,右侧滚动条越来越短(这是动态页面)

网页源码判断

右键查看源码:网站服务器返回给浏览器的原始源代码

开发者工具查看源码:开发者工具看到的是浏览器对原始的源代码做了错误的修正和动态加载的结果。(ps:会尝试自动修复一些常见的错误,比如缺失的闭合标签等。

两者基本相同则静态

举个例子:

汽车之家:我是觉得没有什么区别的,而且他的右边的滚动条是一直不变的,但是它是动态网址。

所以我找了一个新的思路:

静态网站的网址可以是任何以.html.htm.shtml等为后缀的网址,这些网址通常指向的是服务器上的静态HTML文件。

根据这个我来找一个静态的网页:

Chinadaily里的一篇文章:这一定是静态页面咯!

Step4:静态网页的爬取

其实这个是好操作的,有一个web scrapy的插件能无代码爬取,但是有一些他是不能爬到的,说到这个,当是我以为会这个插件就是学会爬虫了,开心的去面试,then面试官让我爬取一个网址的信息,结果面试官说我爬出来的信息是残缺的,哈哈哈~

爬取信息:

获取包含所需数据的源代码;

从源代码中提取数据;

对数据进行清洗和存储。

实操:

  1. 确定目标页面类型:静态页面
  2. 网址:Changing his tune for a dream - Chinadaily.com.cn
  3. 获取浏览器的User-Agent:

(1)键入:chrome://version

(2)找到“用户代理”,将其对应的字符串copy下来

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36

确定目标网页的编码格式:

找到head,找到第一个meta,目标网页编码格式:utf-8

编写代码:

(1)获取包含所需数据的源代码;

import requests
url = 'https://www.chinadaily.com.cn/a/202409/21/WS66ee2395a3103711928a903c.html'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
}
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
result = response.text
with open(file='html_code.txt', mode='w', encoding='utf-8') as file:
    file.write(result)

(2)从源代码中提取数据;

如果包含数据的网页源代码有一定的规律,那么可以使用正则表达式对字符串进行匹配,从而提取所需要的数据。

正则表达式由一些特定字符组成-普通字符和元字符。

Python内置处理正则表达式的re模块,在爬虫任务中主要使用的是模块的findall()函数。

Test.ipynb (2)

Findall()返回值是一个列表,即使只提取一个子字符串,返回的依旧是一个列表。如果没有任何结果,则返回一个空列表。

爬虫常用的是两种非贪婪匹配法:

(.*?) 和 .*?

(.*?):提取A和B之间的文本

 .*?:代替A和B之间的文本,不提取

分析网页源代码并编写正则表达式:

<div class="tw4">
                <div class="tw4_p"><a target="_blank" shape="rect" href="//www.chinadaily.com.cn/a/202409/17/WS66e8d490a3103711928a83ba.html"><img width="140" height="90" src="//img2.chinadaily.com.cn/images/202409/17/66e8e376a3103711c348696e.jpeg" /></a></div>
                <div class="tw4_t"><a target="_blank" shape="rect" href="//www.chinadaily.com.cn/a/202409/17/WS66e8d490a3103711928a83ba.html">Festive China: Mid-Autumn Festival</a></div>
              </div>

编写的正则表达式:

<div class="tw4_t"><a target="_blank" shape="rect" href=".*?">(.*?)</a></div>

代码:

import re

with open(file='html_code.txt', mode='r', encoding='utf-8') as f:
    result = f.read()
p_title = r'<div class="tw4_t"><a target="_blank" shape="rect" href=".*?">(.*?)</a></div>'
title = re.findall(p_title, result, re.S)
print(len(title))
print(title)


// 整合:
import requests
import re

url = 'https://www.chinadaily.com.cn/a/202409/21/WS66ee2395a3103711928a903c.html'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
}
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
result = response.text

p_title = r'<div class="tw4_t"><a target="_blank" shape="rect" href=".*?">(.*?)</a></div>'

title = re.findall(p_title, result, re.S)
print(len(title))
print(title)

编写css选择器:

.tw4_t a

然后ctrl+F进行搜索,有四条符合规则,是对的

使用beautifulsoup进行数据的提取

代码:

import requests
from bs4 import BeautifulSoup

url = 'https://www.chinadaily.com.cn/a/202409/21/WS66ee2395a3103711928a903c.html'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
}

response = requests.get(url=url, headers=headers)
response.encoding = 'gbk'
result = response.text

# css选择器
soup = BeautifulSoup(result, 'lxml')  

title_tags = soup.select('.tw4_t a')
print(len(title_tags))
print(title_tags)

for title_tag in title_tags:
    print(title_tag.get_text())

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

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

相关文章

MQ入门(4)

Erlang&#xff1a;面向高并发的 单机的吞吐量就是并发性&#xff1a;Rabbitmq是10w左右&#xff08;现实项目中已经足够用了&#xff09;&#xff0c;RocketMQ是10w到20w&#xff0c;Kafka是100w左右。 公司里的并发&#xff08;QPS&#xff09; 大部分的公司每天的QPS大概…

【CSS in Depth 2 精译_036】5.6 Grid 网格布局中与对齐相关的属性 + 5.7本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

react:组件通信

组件通信 父组件向子组件通信 function App() {return (<div><div>这是父组件</div><Child name"这是子组件" /></div>); }// 子组件 function Child(props) {return <div>{props.name}</div>; }props说明 props可以传…

AWS 管理控制台

目录 控制台主页 AWS 账户信息 AWS 区域 AWS 服务选择器 AWS 搜索 AWS CloudShell AWS 控制面板小部件 控制台主页 注册新的 AWS 账户并登录后&#xff0c;您将看到控制台控制面板。这是与各种 AWS 服务以及其他重要控制台组件进行交互的起点。控制面板由页面顶部的导航…

初始Vitis——ZYNQ学习笔记1

一、Vitis是什么 Vitis 统一软件平台的前身为 Xilinx SDK&#xff0c;从 Vivado 2019.2 版本开始&#xff0c; Xilinx SDK 开发环境已统一整合到全功能一体化的 Vitis 中。 Vitis 开发平台除了启动方式、软件界面、使用方法与 SDK 开发平台略有区别&#xff0c;其他操作几乎一模…

Windows本地连接远程服务器并创建新用户详细记录

前提可知&#xff1a; &#xff08;1&#xff09;服务器IP地址&#xff1a;x.x.x.x &#xff08;2&#xff09;服务器名称&#xff1a;root&#xff08;一般默认为root&#xff0c;当然也有别的名称&#xff09; &#xff08;3&#xff09;服务器登陆密码&#xff1a;**** 一、…

计算机毕业设计之:基于微信小程序的校园流浪猫收养系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Python类及元类的创建流程

Python类及元类的创建流程 代码运行结果再看type和object的关系和约定type和object具有的方法不一样看代码和运行结果&#xff0c;可以完全理解python的执行过程。再补充几点&#xff0c; 代码 class MetaCls(type):print(0>>>, MetaCls, 0)def __init__(self, name,…

13.面试算法-字符串常见算法题(二)

1. 字符串反转专题 我们知道反转是链表的一个重要考点&#xff0c;反转同样是字符串的重要问题。常见问题也就是在LeetCode中列举的相关题目&#xff1a; 【1】LeetCode344. 反转字符串&#xff1a;编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符…

【小沐学GIS】blender导入OpenStreetMap城市建筑(blender-osm、blosm)

文章目录 1、简介1.1 blender1.2 osm地图 2、OpenStreetMap下载方式2.1 Simple2.2 Overpass API2.3 OSM星球2.4 Geofabrik下载2.5 其他方法2.6 BBBike 3、blender-osm插件3.1 简介3.2 操作 结语 1、简介 1.1 blender https://www.blender.org/ Blender 是一款免费的开源 3D …

机器学习周报第五十七周 GATRes

文章目录 week56 HA-GNN摘要Abstract一、大数据相关1. 单机zookeeper2. 与hbase对接的技术2.1 使用hive操作hbase——直接与hbase对接&#xff08;非接口技术&#xff09;使用 pyhive 操作 Hive 2.2 mysql操作hbase&#xff08;非接口技术&#xff09;导出 HBase 数据到 MySQL导…

【技术调研】三维(7)-Unity基础笔记

安装 ​ 最好使用长期维护版本。 创建项目 ​ 略 窗口布局 Hierarchy:层级面板,展示当前打开的场景里面有哪些物体。 Scene:场景面板,显示当前场景的样子 Game:游戏面板,场景运行的时候的样子 Inspector:检视面板(或属性面板),查看一个游戏物体由哪些组件组成。 …

有关shell指令练习2

写一个shell脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件&#xff0c;dir dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中 …

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…

uni-app页面调用接口和路由(四)

文章目录 一、路由二、页面调用接口二、路由跳转1.uni.navigateTo(OBJECT)2.uni.redirectTo(OBJECT)3.uni.reLaunch(OBJECT)4.uni.switchTab(OBJECT)5.uni.navigateBack(OBJECT) 总结 一、路由 路由配置 uni-app页面路由为框架统一管理&#xff0c;开发者需要在pages.json里配…

VBA技术资料MF199:屏蔽单元格右键菜单复制剪切按钮

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 &#xff08;1&#xff09;在Solver选项卡中可以设置仿真的起始时间和结束时间&#xff0c;一般起始时间设为0&#xff0c;而结束时间按需设置。 &#xff08;2&#xff09;如果希望仿真不会自动暂停&#xff08;也就…

通过springcloud gateway优雅的进行springcloud oauth2认证和权限控制

代码地址 如果对你有帮助请给个start&#xff0c;本项目会持续更新&#xff0c;目标是做一个可用的快速微服务开发平台&#xff0c;成为接私活&#xff0c;毕设的开发神器&#xff0c; 欢迎大神们多提意见和建议 使用的都是spring官方最新的版本&#xff0c;版本如下&#xff1…

通过UV快速计算品牌独立站网络流量

背景&#xff1a; 品牌独立站项目交付过程中&#xff0c;我们需要为客户提供“云资源” 成本报价&#xff0c;其中“计算资源” 及CPU、内存、存储 参数相对固定&#xff0c;而互联网网络成本需要进行评估报价&#xff0c;以海外TOP云平台 AWS、AZURE、GCP 为例都是以“不限带…

专业的屏幕录像和视频编辑的软件Camtasia 2024安装激活图文教程

‌Camtasia 2024是一款专业的屏幕录像和视频编辑的软件套装。它由TechSmith公司开发‌&#xff0c;提供了强大的屏幕录像、视频剪辑和编辑、视频菜单制作、视频剧场、视频播放等功能。 Camtasia Studio 2024是该软件套装的核心部分&#xff0c;支持在PC和Mac平台上运行&#xf…