Python -- 网络爬虫

Python – 网络爬虫

流程:
1. 连接链接获取页面内容(html文件);
2. 过滤获取需要信息(正则) [可能重复步骤1,2] ;
3. 存储文件到本地。

一)网络连接获取页面内容

# 网络连接获取页面内容es
import urllib.request as request # 使用网络请求类库
import urllib.error as error # 连接
import requests # 另一种网络连接方式headers = {'Connection':'keep-alive','Accept-Language':'zh-CN,zh;q=0.9','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
}# 简单直接访问网页 (某些网页可能被拒绝访问)
def getHtml(url):try:req = request.Request(url) # 获取请求webpage = request.urlopen(req) # 打开页面方法1# webpage = request.urlopen(url) # 打开页面方法2html = webpage.read() # 读取页面内容return htmlexcept error.URLError as e:print(str(e.code) + '\t' + e.reason)return Nonedef getXMLText(url):try:response = requests.get(url) # headers = headersresponse.raise_for_status()response.encoding = "utf-8"return response.textexcept:return None# 配置访问请求
def getHtmlWithHead(url):req = request.Request(url, headers)  # 发送请求同时传data表单webpage = request.urlopen(req) html = webpage.read() # 读取页面内容return html#====================================================
def main():url = input('输入网址: ')print(getHtml(url))print(getXMLText(url))#----------------------------------------------------------------
if __name__ == '__main__':main()
python用于爬虫的库: urllib, requestsurllib.request 用于打开和读取URL, (request.urlopen)
urllib.error 用于处理前面request引起的异常, (:403	Forbidden)
urllib.parse 用于解析URL,urlopen(url, data=None, timeout=<object object at 0x000001D4652FE140>, *, cafile=None, capath=None, cadefault=False, context=None)。

二)过滤、筛选、替换

1. from bs4 import BeautifulSoup as bs: # 使用文档解析类库, 整理HTML文件,方便处理
soup = bs(html, 'html.parser') # 'lxml'# 返回为数组
info = soup.find_all('div', attrs={'class' : 'add'})# 获取所有标签为'div', 属性为class,属性值为'add'的数据: <div class="add">当前位置:xxxx</div>
info = soup.select('p') # 获取所有标签为'a'(链接)的数据:<a href="https://www.xxx.com/">xxx</a>
2. import re # 正则# 返回为数组
title = re.compile(r'<h2>(.*?)</h2>').search(str(info))# 在info字符串内获取所有被<h2>和</h2>包围的字段
3. str 字符操作
author = str(info).replace('<p>','').replace('</p>','').rstrip() # lstrip()

三)本地存储

import os # 含文件读写
import time # time.sleep(0.1)dir = 'D:\\Python\\Data\\'
path = 'D:\\Python\\Data\\text.txt'
1. create dir
isExists = os.path.exists(dir)if not isExists:os.mkdir(path)2. write: 'w','wb'
file = open(path,'w',encoding='utf-8') # 以'utf-8'编码方式向path路径指向的文件内写入(不存在会自动创建)
file.write('content')
file.close() # 写完后记得关闭3. read: 'r','rb'
file = open(path, 'rb')

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

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

相关文章

红包雨html

1、分享一个红包雨html代码。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红包雨小游戏</ti…

稳定性分析案例

ref&#xff1a; 破获ARM64位CPU下linux crash要案之神技能&#xff1a;手动恢复函数调用栈 - 皮皮的技术志 - 博客园

CSP/信奥赛C++刷题训练:经典二分答案例题(3): 洛谷P2920:Time Management S

CSP/信奥赛C++刷题训练:经典二分答案例题(3) [USACO08NOV] Time Management S 题目描述 Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs conveniently numbered 1…N (1 <= N <= 1,000) to accompl…

Spring Boot集成iText实现电子签章

文章目录 一 电子签章1.1 什么是电子签章1.2 签名流程1.3 技术选型 二 实战2.1 生成数字证书2.2 生成印章图片2.3 PDF 签名 一 电子签章 1.1 什么是电子签章 基于《中华人民共和国电子签名法》等相关法规和技术规范&#xff0c;具有法律效力的电子签章一定是需要使用 CA 数字…

Unbounded:一个无限生成式交互的角色生活模拟游戏

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

插槽 - 2024最新版前端秋招面试短期突击面试题【100道】

插槽 - 2024最新版前端秋招面试短期突击面试题【100道】 在前端开发中&#xff0c;插槽是一个非常重要的概念&#xff0c;尤其是在使用 Vue.js 时。本文将深入探讨插槽的使用&#xff0c;包括默认插槽、具名插槽和作用域插槽&#xff0c;帮助你在面试中更好地理解和回答相关问…

Vertx实现和spring的application.yml自动配置加载

前言 在用vertx写项目的时候&#xff0c;由于需要不同的环境加载不同的配置文件&#xff0c;这里就需要和spring架构的application.yml配置文件一样&#xff0c;可以根据环境变量加载不同的配置。 代码 引入vertx相关依赖 <dependency><groupId>io.vertx</gr…

ECharts饼图-饼图自定义样式,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

猫头虎 分享:前端工具 NVM 的简介、安装、用法详解入门教程

&#x1f42f; 猫头虎 分享&#xff1a;前端工具 NVM 的简介、安装、用法详解入门教程 今天猫头虎带您深入了解 NVM&#xff01;最近&#xff0c;猫哥在项目中遇到一个前端小伙伴&#xff0c;询问如何在开发过程中高效地切换不同的 Node.js 版本。前端项目往往需要特定版本的 …

二分查找_在排序数组中查找元素的第一个和最后一个位置

1.朴素二分查找 .二分查找 二分查找思路&#xff1a; 1.left0,rightnums.size()-1&#xff08;最后一个元素下标&#xff09;&#xff0c;取中间元素下标 midleft(right-left)/2 &#xff08;防溢出&#xff09; 2.nums[mid]>target &#xff0c;说明mid右边的元素都大于ta…

Discuz 论坛开发一套传奇发布站与传奇开服表

Discuz 论坛开发一套传奇发布站与传奇开服表 随着互联网技术的飞速发展&#xff0c;网络游戏已成为人们休闲娱乐的重要方式之一。在众多网络游戏中&#xff0c;传奇系列以其独特的魅力吸引了大量忠实玩家。为了满足这些玩家的需求&#xff0c;并促进游戏信息的交流与分享&…

CSP-S2024游记

考前 前一天晚上提前回家了&#xff0c;晚上十一点上床睡觉&#xff0c;上午九点半自然醒了&#xff0c;在床上刷了半个小时手机&#xff0c;成功略过了早饭。 午饭前看了一会板子&#xff0c;tarjan、KMP之类的简单板子&#xff0c;但好像都没考到。 午饭吃的很简单&#x…

QT编辑框带行号

很可惜&#xff0c;qt的几个编辑框并没有相关功能。所以我们要自己实现一个。 先讲讲原理&#xff1a; QPlainTextEdit继承自QAbstractScrollArea&#xff0c;编辑发生在其viewport&#xff08;&#xff09;的边距内。我们可以通过将视口的左边缘设置一个空白区域&#xff0c;…

VScode插件:前端每日一题

大文件上传如何做断点续传&#xff1f; 在前端实现大文件上传的断点续传&#xff0c;通常会将文件切片并分块上传&#xff0c;记录每块的上传状态&#xff0c;以便在中断或失败时只上传未完成的部分。以下是实现断点续传的主要步骤和思路&#xff1a; 1. 文件切片 (File Slici…

ubuntu 20.4 安装 openssl 3.x

ubuntu 20.4 安装 openssl 3.x ubuntu 20.4 自带了openssl 1.0.2&#xff0c;升级为 openssl 3.x&#xff1a; # 下载 openssl 源代码压缩包 wget https://www.openssl.org/source/openssl-3.0.10.tar.gz# 安装编译包 sudo apt-get install -y g sudo apt-get install -y mak…

python把一张小图粘贴到一张大图上

在Python中&#xff0c;你可以使用Pillow库&#xff08;Python Imaging Library的一个分支&#xff09;来实现将一张小图粘贴到一张大图的左上角&#xff08;0, 0&#xff09;位置。以下是一个示例代码&#xff0c;展示了如何完成这一任务&#xff1a; 首先&#xff0c;确保你…

QtCreator通过CMake多文件编译.cpp、.qss、.h、.ui文件,达到MVC三层架构的效果

博主在构建C项目的时候&#xff0c;一般都喜欢将头文件和源文件分开为不同的文件夹&#xff0c;比如include目录下只存放.h文件和.ui文件&#xff0c;src目录下只存放.cpp和.qss文件&#xff0c;res目录下只存放图片、音频等文件&#xff0c;这时候使用CMake对项目进行分文件管…

qml圆形图片,qml圆形头像制作

代码比较简单&#xff0c;就不细讲了&#xff0c;大家直接看下面源码吧&#xff01;如果对你有所帮助&#xff0c;可以帮角角点个关注嘛&#xff1f; import QtQuick import QtQuick.Effects import Qt5Compat.GraphicalEffectsWindow {width: 640height: 480visible: truetit…

使用代理服务器后sse数据合并问题

如果是使用本地代理服务器devServer compress:false,如果是发布到生产环境下的代理服务器nginx 增加如下配置&#xff0c;该配置同时支持websocket和sse proxy_http_version 1.1; #设置代理请求使用 HTTP/1.1 版本。WebSocket 需要 HTTP/1.1&#xff0c;因为它支持持久连接和更…

【python库】PandasGUI介绍

Github地址&#xff1a;https://github.com/adamerose/PandasGUI 在数据科学和分析过程中&#xff0c;数据的可视化和交互操作是非常重要的环节。尽管 Pandas 是一个强大的数据处理库&#xff0c;但其缺乏用户友好的图形界面&#xff0c;这使得数据探索和分析变得相对繁琐。pan…