Python 万能代码模版:爬虫代码篇

news2025/2/26 5:50:14

你好,我是悦创。

很多同学一听到 Python 或编程语言,可能条件反射就会觉得“很难”。但今天的 Python 课程是个例外,因为今天讲的 **Python 技能,不需要你懂计算机原理,也不需要你理解复杂的编程模式。**即使是非开发人员,只要替换链接、文件,就可以轻松完成。

并且这些几个实用技巧,简直是 Python 日常帮手的最佳实践。比如:

  • 爬取文档,爬表格,爬学习资料;
  • 玩转图表,生成数据可视化;
  • 批量命名文件,实现自动化办公;
  • 批量搞图,加水印、调尺寸。

接下来,我们就逐一用 Python 实现,其中我提供的代码是万能代码,只用替换成你想爬的网页链接、文件位置、照片就可以进行处理了。

如果你没有安装 Python 及相关环境搭建,你可以参考我之前写的文章:

  • 数据分析的环境不会搭?看这里准没错!
  • Python3 网络爬虫系统一对一教学(环境安装)

**Tips:**因为不同的章节的数据可能会交叉引用,所以建议你首先在桌面建立一个工作夹,然后每个章节都单独建立一个 Python 文件进行实验。比如可以新建一个 pytips 的目录,然后在该目录下,每个章节创建一个 tips 文件夹,里面创建对应的 .py 文件。(按你具体的来,我的文件夹也和这个不一样)

1. 巧用 Python 爬虫,实现财富自由

首先可以用 Python 来进行爬虫,什么是爬虫?简单理解来说就是抓取网络上的数据(文档、资料、图片等)。比如你考研可以爬文档和学习资料,要网络上的表格数据做分析,批量下载图片等。

下面我们来看看如何一一实现。

1.1 爬取文档、学习资料

首先,你得先确定你要爬的网站是什么?你要获取的目的是什么?比如,小悦想爬青岩帮网站中的报考指南,所以他想搜集目前该网页的所有文章的标题和超链接,以方便后续浏览。
image.png
image.png

爬取网站的链接:https://zkaoy.com/sions/exam
目的:收集目前该网页的所有文章的标题和超链接

那使用 Python,可以参考以下两步的代码模板实现(提示:需要先安装 Python 依赖:urllib3 bs4)。
安装所需要的库:

pip install urllib3 BeautifulSoup4

第一步,下载该网页并保存为文件,代码如下。
**PS:**这里,我为了清晰一些,拆成两个代码文件,后面我再来一个合并成一个代码文件。

# urllib3 的方法
# file_name:Crawler_urllib3.py
import urllib3


def download_content(url):
    """
    第一个函数,用来下载网页,返回网页内容
    参数 url 代表所要下载的网页网址。
    整体代码和之前类似
    """
    http = urllib3.PoolManager()
    response = http.request("GET", url)
    response_data = response.data
    html_content = response_data.decode()
    return html_content


# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
    fo = open(filename, "w", encoding="utf-8")
    fo.write(content)
    fo.close()


def main():
    # 下载报考指南的网页
    url = "https://zkaoy.com/sions/exam"
    result = download_content(url)
    save_to_file("tips1.html", result)


if __name__ == '__main__':
    main()


# requests 代码
# file_name:Crawler_requests.py
import requests


def download_content(url):
    """
    第一个函数,用来下载网页,返回网页内容
    参数 url 代表所要下载的网页网址。
    整体代码和之前类似
    """
    response = requests.get(url).text
    return response


# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
    with open(filename, mode="w", encoding="utf-8") as f:
        f.write(content)


def main():
    # 下载报考指南的网页
    url = "https://zkaoy.com/sions/exam"
    result = download_content(url)
    save_to_file("tips1.html", result)


if __name__ == '__main__':
    main()

第二步,解析网页,并提取出文章的链接和标题。

# file_name:html_parse.py
# 解析方法一
from bs4 import BeautifulSoup

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	with open(filename, "r", encoding='utf-8') as f:
		html_content = f.read()
		doc = BeautifulSoup(html_content)
	return doc

def parse(doc):
	post_list = doc.find_all("div", class_="post-info")
	for post in post_list:
		link = post.find_all("a")[1]
		print(link.text.strip())
		print(link["href"])

def main():
	filename = "tips1.html"
	doc = create_doc_from_filename(filename)
	parse(doc)

if __name__ == '__main__':
	main()


# file_name:html_parse_lxml.py
# 解析方法二,指定解析器
from bs4 import BeautifulSoup

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	with open(filename, "r", encoding='utf-8') as f:
		html_content = f.read()
		soup = BeautifulSoup(html_content, "lxml")
	return soup

def parse(soup):
	post_list = soup.find_all("div", class_="post-info")
	for post in post_list:
		link = post.find_all("a")[1]
		print(link.text.strip())
		print(link["href"])

def main():
	filename = "tips1.html"
	soup = create_doc_from_filename(filename)
	parse(soup)

if __name__ == '__main__':
	main()

**PS:**两个代码很像,只是差别在指定了解析器——lxml

执行代码之后,你就可以看到网页中的标题和链接已经被打印到了屏幕上。

敲黑板!这些省份往届生不能预报名!
https://zkaoy.com/15123.html
二战必须回户籍所在地考吗?
https://zkaoy.com/15103.html
这些同学不能参加预报名!不注意,有可能考研报名失败!
https://zkaoy.com/15093.html
呜呼~考研报名费,这种情况可以退款!
https://zkaoy.com/15035.html
注意:又发通知!22研招有4点变化??
https://zkaoy.com/14977.html
2021考研初试时间定了!正式网报时间有变化
https://zkaoy.com/14915.html
快码住!考研前的这些关键时间点,千万不能错过!
https://zkaoy.com/14841.html
近万名考生考研报名失败!问题出在这!22考研一定注意!
https://zkaoy.com/14822.html
往届生比应届生更容易上岸,你认同吗?
https://zkaoy.com/14670.html
各省市考研报名费用!
https://zkaoy.com/14643.html
要开始报名了?现在不需要担心,没你想的那么复杂……
https://zkaoy.com/14620.html
教育部公布重要数据:研究生扩招20.74%!
https://zkaoy.com/14593.html
虚假招生?这一高校临近开学取消奖学金!
https://zkaoy.com/14494.html
下个月要预报名了,高频问题早知道
https://zkaoy.com/14399.html
注意!这些网报信息要准备好,否则影响9月考研报名!
https://zkaoy.com/14352.html
想考上研,各科应该考多少分?
https://zkaoy.com/14273.html
选择报考点需要注意什么?报考点有限制!
https://zkaoy.com/14161.html
各地考研报名费汇总!快来看看你要交多少钱!
https://zkaoy.com/14158.html
考研高校推免人数公布,统考名额还剩多少?
https://zkaoy.com/14092.html
这几所高校考研参考书有变!参考书目要怎么搜集?
https://zkaoy.com/14061.html
院校指南
https://zkaoy.com/sions/zxgg1
这些要提前准备好!不然影响报名!
https://zkaoy.com/13958.html
救命!近万人因为这个,错失考研机会!
https://zkaoy.com/13925.html
考研如何看招生简章和招生目录?
https://zkaoy.com/13924.html

上面,我是拆开了,现在合并成一个代码文件即可:

# file_name:Crawler.py
import requests
from bs4 import BeautifulSoup


def download_content(url):
    """
    第一个函数,用来下载网页,返回网页内容
    参数 url 代表所要下载的网页网址。
    整体代码和之前类似
    """
    response = requests.get(url).text
    return response


# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
    with open(filename, mode="w", encoding="utf-8") as f:
        f.write(content)

def create_doc_from_filename(filename):
    # 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
    with open(filename, "r", encoding='utf-8') as f:
        html_content = f.read()
        soup = BeautifulSoup(html_content, "lxml")
    return soup

def parse(soup):
    post_list = soup.find_all("div", class_="post-info")
    for post in post_list:
        link = post.find_all("a")[1]
        print(link.text.strip())
        print(link["href"])


def main():
    # 下载报考指南的网页
    url = "https://zkaoy.com/sions/exam"
    filename = "tips1.html"
    result = download_content(url)
    save_to_file(filename, result)
    soup = create_doc_from_filename(filename)
    parse(soup)

if __name__ == '__main__':
    main()

代码文件:[https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python 万能代码模版:10 大必学实用技巧/1.1 巧用 Python 爬虫,实现财富自由](https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python 万能代码模版:10 大必学实用技巧/1.1 巧用 Python 爬虫,实现财富自由)

那如果你想爬取其他网页如何替换呢?你只需替换几处即可,如下图所示。
image.png
image.png

  1. 替换为想要下载的网页地址
  2. 替换为网页保存的文件名
  3. 是 BeautifulSoup 函数,我们用它一步步从 html 的结构中解析出我们想要的内容,这里我们实现的是首先找到所有 class 属性是 post-info 的 div 标签,然后将这些标签中的 a 标签的文本部分提取出来。如果你解析的网页结构和这个不同,具体 BeautifulSoup 的用法可以参考我们这节课程 https://www.aiyc.top/673.html#六、Requests_与_BeautifulSoup_库的基础操作。

1.2 抓取表格,做数据分析

我们日常在上网的时候,往往都会看到一些有用的表格,都希望保存下来日后使用,但直接复制到 Excel 往往都很容易发生变形,或者乱码,或者格式错乱等种种问题,借助 Python 可以轻松实现网页中表格的保存。(提示:需要先安装依赖: urllib3, pandas)

pip install urllib3 pandas

以招行外汇页面为例:
image.png
Python 代码如下:

# file_name: excel_crawler_urllib3.py
import urllib3
import pandas as pd

def download_content(url):
	# 创建一个 PoolManager 对象,命名为 http
	http = urllib3.PoolManager()
	# 调用 http 对象的 request 方法,第一个参数传一个字符串 "GET"
	# 第二个参数则是要下载的网址,也就是我们的 url 变量
	# request 方法会返回一个 HTTPResponse 类的对象,我们命名为 response
	response = http.request("GET", url)

	# 获取 response 对象的 data 属性,存储在变量 response_data 中
	response_data = response.data

	# 调用 response_data 对象的 decode 方法,获得网页的内容,存储在 html_content
	# 变量中
	html_content = response_data.decode()
	return html_content

def save_excel():
	html_content = download_content("http://fx.cmbchina.com/Hq/")
	# 调用 read_html 函数,传入网页的内容,并将结果存储在 cmb_table_list 中
	# read_html 函数返回的是一个 DataFrame 的list
	cmb_table_list = pd.read_html(html_content)
	# 通过打印每个 list 元素,确认我们所需要的是第二个,也就是下标 1
	cmb_table_list[1].to_excel("tips2.xlsx")

def main():
	save_excel()

if __name__ == '__main__':
	main()


# file_name: excel_crawler_requests.py
import requests
import pandas as pd
from requests.exceptions import RequestException


def download_content(url):
	try:
		response = requests.get(url)
		if response.status_code == 200:
			return response.text
		else:
			return "None"
	except RequestException as e:
		return e


def save_excel(filename):
	html_content = download_content("http://fx.cmbchina.com/Hq/")
	# 调用 read_html 函数,传入网页的内容,并将结果存储在 cmb_table_list 中
	# read_html 函数返回的是一个 DataFrame 的list
	cmb_table_list = pd.read_html(html_content)
	# 通过打印每个 list 元素,确认我们所需要的是第二个,也就是下标 1
	# print(cmb_table_list)
	cmb_table_list[1].to_excel(filename)


def main():
	filename = "tips2.xlsx"
	save_excel(filename)

if __name__ == '__main__':
	main()

下图为了辅助理解:
image.png
image.png
执行之后,会在代码文件所在的目录生成 tips2.xlsx 的 excel 文件,打开之后如下图所示。
image.png
当你希望抓取自己的表格时,替换下面 3 个部分即可。
image.png

  1. 修改你要保存的 excel 文件名称;
  2. 替换为想要抓取表格所在网页的网址;
  3. 替换为表格的序号,比如想要抓取网页中的第几个表格;

代码链接:https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python%20万能代码模版:10%20大必学实用技巧/1.2%20抓取表格,做数据分析

1.3 批量下载图片

当我们看到一个网页上有很多喜欢的图片时,一张一张保存效率比较低。

通过 Python 我们也可以实现快速的图片下载。以堆糖网为例,我们看到了这个网页。
image.png
感觉很好看,希望能够把所有图片下载下来,方案大体和 1 是一样的。

我们首先下载网页,然后分析其中的 img 标签,然后把图片下载下载来。首先我们在工作目录建立一个文件夹 tips_3 用来放下载的图片。

首先还是下载网页,Python 代码如下。

# -*- coding: utf-8 -*-
# @Author: 
# @Date:   2021-09-13 20:16:07
# @Last Modified by:   aiyc
# @Last Modified time: 2021-09-13 21:02:58
import urllib3

# 第一个函数,用来下载网页,返回网页内容
# 参数 url 代表所要下载的网页网址。
# 整体代码和之前类似
def download_content(url):
	http = urllib3.PoolManager()
	response = http.request("GET", url)
	response_data = response.data
	html_content = response_data.decode()
	return html_content
# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量

def save_to_file(filename, content):
	fo = open(filename, "w", encoding="utf-8")
	fo.write(content)
	fo.close()

url = "https://www.duitang.com/search/?kw=&type=feed"
result = download_content(url)
save_to_file("tips3.html", result)

然后是抽取 img 标签,下载图片。

from bs4 import BeautifulSoup
from urllib.request import urlretrieve

# 输入参数为要分析的 html 文件名,返回值为对应的 BeautifulSoup 对象
def create_doc_from_filename(filename):
	fo = open(filename, "r", encoding='utf-8')
	html_content = fo.read()
	fo.close()
	doc = BeautifulSoup(html_content, "lxml")
	return doc

doc = create_doc_from_filename("tips3.html")
images = doc.find_all("img")
for i in images:
	src = i["src"]
	filename = src.split("/")[-1]
	# print(i["src"])
	urlretrieve(src, "tips_3/" + filename)

执行完毕后打开 tips_3目录,可以看到图片都被下载下来了。
image.png
替换说明如下。
image.png

  1. 替换为想要保存的文件名(网页文件);
  2. 替换为想要下载网页的网址;
  3. 替换为想要保存图片的文件夹,需要创建好文件夹。

另外,有的网站的图片是先显示网页之后才动态加载的,这类动态加载的内容的图片下载是不支持的喔。
代码链接:https://github.com/AndersonHJB/AIYC_DATA/tree/main/01-Python%20万能代码模版:10%20大必学实用技巧/1.3%20批量下载图片

·推出辅导班啦,包括「Python 语言辅导班、C++辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。QQ、微信在线,随时响应!V:Jiabcdefh

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

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

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

相关文章

Vite打包性能优化之开启Gzip压缩

在使用 vite 进行项目打包时,默认已经帮我们做了一些优化工作,比如代码的压缩,分包等等。除此之外,我们还有一些可选的优化策略,比如使用 CDN ,开启 Gzip 压缩等。本文会介绍在 vite 中使用插件来开启 Gzip…

vue-router路由懒加载

路由懒加载指的是打包部署时将资源按照对应的页面进行划分,需要的时候加载对应的页面资源,而不是把所有的页面资源打包部署到一块。避免不必要资源加载。(参考vue项目实现路由按需加载(路由懒加载)的3种方式_小胖梅的博客-CSDN博客_vue懒加载…

原生微信小程序/uniapp使用空格占位符无效解决方法

最近碰到一个需求&#xff0c;在一个<text>文本中的前后添加空格占位符&#xff0c;总所周知&#xff0c;我并不会前端&#xff0c;于是我查看了原生微信小程序以及uniapp官方文档&#xff0c;得到了以下答案&#xff1a; 原生微信小程序官方文档 uniapp官方文档 从文档…

毕业设计-基于微信小程序的校园二手闲置物品交易系统

目录 前言 课题背景与简介 实现设计思路 一、需求分析 二、微信小程序云开发框架及其设计流程 三、功能测试以及性能测试 四、总结 实现效果样例 更多帮助 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要…

如何创建一个vue项目(详细步骤)

一、环境准备 1、安装 node.js 下载地址&#xff1a;https://nodejs.org/en/ 2、检查是否安装成功&#xff1a;输出版本号说明安装成功 二、搭建 vue 环境 1、全局安装脚手架 vue-cli 在命令行输入&#xff1a; npm install vue-cli -g &#xff08;vue-lcli2) npm install…

前端面试题及答案整理(2022最新版)

收集整理2022年最新前端面试题及答案&#xff0c;方便平时翻看记忆&#xff0c;欢迎各位大佬们补充。 一般来说&#xff0c;把下面基础中的高频题写熟练就差不多了。当然去面大厂这些远远不够&#xff0c;还要再刷一些算法题。 基础 高频 1.手写 instanceof // 原理&#x…

【Node.js实战】一文带你开发博客项目(使用假数据处理)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿 offer&#xff08;秋招&#xff09; &#x1f947;推荐学习&…

另一种解决Failed to execute goal on project xxx: Could not resolve dependencies for project com的方法

周青的日常问题记录 项目场景&#xff1a; 学习硅谷电商毕设项目_微服务版本&#xff0c;建站练手。进行到商城前端服务开发的用户服务 store-front-user阶段&#xff0c;pom文件导入依赖报错。 问题描述 报错为 Unresolved dependency: com.atguigu:store-commons:jar:1.0.0…

【 Apifox】Apifox接口设计

Apifox官网地址&#xff1a;http://apifox.cn/a103abcc 文章目录一、接口设计 (接口文档)二、如何定义接口&#xff1f;三、接口路径四、基础信息五、请求参数1.Params 参数2.Body 参数3.Body 参数类型六、参数中使用环境变量&#xff08;或全局变量/临时变量&#xff09;七、返…

VSCode中ESLint插件修复+配置教程

文章目录vscodeeslint插件配置教程如果不好用排查1: 如果出现后面回车符问题排查2: 保存时好了但是一瞬间代码又回来了排查3: 右下角是否开启eslint服务排查4: 如果保存还是变回去了排查5: ESLint不生效排查6: 如果都用心走了一遍, 还不行额外说明-新文件还是末尾换行问题vscod…

vue.config.js配置proxy代理解决跨越;proxy代理报404;

像我们本地的vue项目运行起来&#xff0c;访问的地址一般是localhost&#xff0c;这个时候请求后台的接口&#xff0c;端口号也不一致&#xff0c;肯定就会存在跨域问题&#xff0c;所以我们要是想正常访问接口的话&#xff0c;就需要解决掉跨域问题。 本文我们是在vue.config.…

New Promise() 基础

阅读目录console.dir(Promise) 打印resolve 做用reject 的用法catch 的用法all 方法的用法console.dir(Promise) 打印 Promise 是一个构造函数&#xff0c;本身身上有 all、reject、resolve 这几个方法&#xff0c;原型上有 then、catch 等方法。 所以 Promise new 出来的对象…

VUE使用Three.js实现模型,点击交互,相机旋转视角跟随移动(Threejs中使用Tweenjs,含demo源码)

目录 一、Three.js是什么&#xff1f; 二、VUE简单使用Three.js步骤 1.npm安装 2.template模板 3.引入库 4.定义全局变量 5.初始化场景 6.初始化相机 7.初始化灯光 8.初始化渲染器 9.创建模型(这里我搭建的模型是一个简单双面货架模型) 10.根据浏览器窗口自适应 11…

Vue3中slot插槽使用方式

一文搞懂Vue3中slot插槽的使用&#xff01; 使用 Vue 的小伙伴相信你一定使用过插槽&#xff0c;如果你没有用过&#xff0c;那说明你的项目可能不是特别复杂。插槽&#xff08;slot&#xff09;可以说在一个 Vue 项目里面处处都有它的身影&#xff0c;比如我们使用一些 UI 组件…

axios无法加载响应数据:no data found for resource with given identifier

美好的、令人遐想的日落黄昏里&#xff0c;出现了诡异的bug&#xff01; 老师上课的时候&#xff0c;不好好听听&#xff0c;不仔细看&#xff01;那么花了那么多时间找bug问题~翻了好多方案&#xff0c;还未解决&#xff0c;然后遇到了我&#xff0c;这个大冤种就是你&#xf…

EasyExcel解析动态表头及导出

前言 excel文件导入及导出&#xff0c;是日常开发中经常遇到的需求。本次笔者以EasyExcel为例&#xff0c;针对在项目中遇到的动态表头解析及导出的场景&#xff0c;详细介绍具体的代码实现过程。 参考地址 https://github.com/alibaba/easyexcel 前端下载 const download …

JavaScript判断对象是否为空对象的几种方法

目录 1、空对象对应的字符串为 "{}" 2、for in 3、jquery 的 isEmptyObject()方法 4、Object.getOwnPropertyNames() 5、ES6 的 Object.keys() JSON.stringify()扩展 1、第一大特性 小结 2、第二大特性 3、第三大特性 4、第四大特性 5、第五大特性 6、第…

Vue实战——使用代理服务器解决跨域问题——No‘Access-Control-Allow-Origin‘ header is present on the requested resource

概论&#xff1a; 目录 一、跨域问题是怎么产生的 1.1 跨域问题&#xff1a; 1.2 解决办法 三、开启代理服务器 第一种方式&#xff1a;&#xff08;存在弊端&#xff09; 细节问题&#xff1a;&#xff08;解释两个弊端&#xff09; 第二种方式&#xff1a;&#xff08…

el-input设置必填提示(单个多个)

有两种:一种是多个el-input通过同一个el-form表单来限制,这种用得最多的地方就是添加和修改功能;另一种是每个el-input通过各自的el-form表单来限制,这种通常是用在动态添加多个输入框等功能上&#xff0c;话不多说&#xff0c;上才艺噻. 第一种&#xff08;多个el-input同时限…

【JavaScript】JS实用案例分享:DOM节点转JSON数据 | 标签输入框

&#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&#xff09; &#x1f5a5;️ TypeScript知识总结&…