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打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.