python爬虫编程实践 Task1--简单爬虫

2023-10-20 14:50

本文主要是介绍python爬虫编程实践 Task1--简单爬虫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个网络爬虫程序最普遍的过程:
1.访问站点;
2.定位所需的信息;
3.得到并处理信息。

示例1:爬取python之禅(The Zen of Python)

requests.get

获取HTML网页的主要方法,对应于HTTP的GET

import requests
url = 'https://www.python.org/dev/peps/pep-0020/'
r = requests.get(url)  #获取url信息
text = r.text
text

在这里插入图片描述
可以看到返回的其实就是开发者工具下Elements的内容,只不过是字符串类型,接下来我们要用python的内置函数find来定位“python之禅”的索引,然后从这段字符串中取出它。

通过观察网站,我们可以发现这段话在一个特殊的容器中,通过审查元素,使用快捷键Ctrl+shift+c快速定位到这段话也可以发现这段话包围在pre标签中,因此我们可以由这个特定用find函数找出具体内容。

<pre> 标签可定义预格式化的文本。被包围在 <pre> 标签 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。
在这里插入图片描述

open(path, ‘-模式-’,encoding=’UTF-8’)
即:open(路径+文件名, 读写模式, 编码)
读写模式:

r :只读 
r+ : 读写 
w : 新建(会对原有文件进行覆盖) 
a : 追加 
b : 二进制文件
# 爬取python之禅并存入txt文件with open('zon_of_python.txt', 'w') as f: # 新建一个zon_of_python.txt文件f.write(text[text.find('<pre')+28:text.find('</pre>')-1]) # 切片提取并写入文件(find就是找到对应字符的索引)
start_index=text.find('<pre')+28
end_index=text.find('</pre>')-1
print(text[start_index:end_index])

在这里插入图片描述
也可以利用python自带的urlib库完成上面的操作。
urllib是python3的标准库,包含了很多基本功能,比如向网络请求数据、处理cookie、自定义请求头等,显然,就代码量而言,urllib的工作量比Requests要大,而且看起来也不甚简洁。
代码如下所示:

import urllib
url = 'https://www.python.org/dev/peps/pep-0020/'
res = urllib.request.urlopen(url).read().decode('utf-8')  
print(res[res.find('<pre')+28:res.find('</pre>')-1])   

在这里插入图片描述

requests.post

我们先以金山词霸为例,有道翻译百度翻译谷歌翻译都有加密,以后可以自己尝试。

首先进入金山词霸首页http://www.iciba.com/

然后打开开发者工具下的“Network”,翻译一段话,比如刚刚我们爬到的第一句话“Beautiful is better than ugly.”

点击翻译后可以发现Name下多了一项请求方法是POST的数据,点击Preview可以发现数据中有我们想要的翻译结果
在这里插入图片描述

我们目前需要用到的两部分信息是Request Headers中的User-Agent,和Form Data
在这里插入图片描述
接下来利用金山词霸来翻译我们刚刚爬出来的pyhon之禅

import requests
def translate(word):url="http://fy.iciba.com/ajax.php?a=fy" # 这个链接直接访问不了的原因:请求分两种,一种是同步请求,一种是异步请求(XHR,不能通过浏览器URL访问)# 同步请求:一般指访问页面# 异步请求:一般在页面加载好后,用户在与页面交互时,页面处理客户的请求就会发出异步请求到后端,等待后端处理后返回来再渲染到页面上。# 为什么存在异步请求呢,例如你查中文翻译,不可能每次结果查出来后都要重新加载一次页面,这样子等待时间长且用户体验差,所以前端一般操作是发出异步请求让后端处理data={'f': 'auto','t': 'auto','w': word,}headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',}#User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。response = requests.post(url,data=data,headers=headers)     #发起请求,返回一个response对象json_data=response.json()   #解析获取json数据,一般异步请求中,后端都是把带json数据的response传回来print(json_data)return json_datadef run(word):    result = translate(word)['content']['out']   
#     print(result)return resultdef main():with open('zon_of_python.txt') as f:zh = [run(word) for word in f]with open('zon_of_python_zh-CN.txt', 'w') as g:for i in zh:g.write(i + '\n')if __name__ == '__main__':main()

在这里插入图片描述

示例2:request.get进阶:爬取豆瓣电影Top250

  • os.path.exists(path)
    如果path存在,返回True;如果path不存在,返回False。
  • HTTP response 包括了三个部分:
  1. Status Code: 描述了这次回应的状况. 它可以用来检查这次请求是否成功完成. 一旦copy请求失败了, 这个status code可以用来寻找原因. 如果你的 servlet 没有返回一个status code, 默认就会返回成功的status code,HttpServletResponse.SC_OK.

  2. Headers: 它包含了response的更多信息.举个例子,headers可以反应response的访问知date/time, 或者是用于将实体安全道地传送到用户的编码形式。

  3. Body: 它是response的具体内容. 可能包括HTML内容,比如图片。Body包括了紧接Header发送的HTTP事务消息数据字节。

import requests
import os  # os 模块提供了非常丰富的方法用来处理文件和目录if not os.path.exists('image'):os.mkdir('image') # 创建目录(文件夹)def parse_html(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}res = requests.get(url, headers=headers)text = res.textitem = []for i in range(25):text = text[text.find('alt')+3:]  # 切片提取需要的字符串item.append(extract(text))  return itemdef extract(text):text = text.split('"')name = text[1]image = text[3]return name, imagedef write_movies_file(item, stars):print(item)with open('douban_film.txt','a',encoding='utf-8') as f:f.write('排名:%d\t电影名:%s\n' % (stars, item[0]))r = requests.get(item[1]) # response对象with open('image/' + str(item[0]) + '.jpg', 'wb') as f:f.write(r.content)  # 图片(音乐,视频,PPTXWORD等)一般用的二进制数据保存的,所以需要用content方法去解析,再写进去。#一个文件,如果用记事本打开后可以看清楚里面的内容,他就是用字符保存。如果是乱码,那就是字节保存,以字节保存的文件一般都是以二进制解析def main():stars = 1for offset in range(0, 250, 25):url = 'https://movie.douban.com/top250?start=' + str(offset) +'&filter='for item in parse_html(url):write_movies_file(item, stars)stars += 1if __name__ == '__main__':main()

在这里插入图片描述

这篇关于python爬虫编程实践 Task1--简单爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/247793

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W