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

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用