python爬虫初体验(二)

server/2024/9/22 13:34:01/

Python中,每个模块都有一个内置的变量 name,用于表示当前模块的名称。当一个Python文件被执行时,Python解释器会首先将该文件作为一个模块导入,并执行其中的代码。此时,__name__的值为模块的名称。

作用

  1. 模块可被导入也可直接执行:使一个Python脚本既可以作为一个独立的程序运行,也可以被其他脚本作为模块导入。
  2. 减少全局污染:当脚本作为模块被导入时,可以避免执行不必要的代码,提高代码的整洁度和可维护性。
  3. 测试代码:可以编写一些测试代码,只在直接运行脚本时执行,而不影响作为模块导入时的行为。

使用场景

  1. 脚本和模块分离:使脚本既可以独立运行,也可以作为模块导入。
  2. 单元测试:在脚本中编写一些测试代码,只在直接运行时执行。
  3. 初始化资源:在脚本直接运行时初始化一些资源,例如数据库连接等。

示例

假设有一个Python脚本 example.py:

python">import csv
import requests
from bs4 import BeautifulSoupdef greet(name):print("Hello, {}!".format(name))def main():# 检查命令行参数数量if len(sys.argv) < 2:print("Usage: python script.py <name>")sys.exit(1) # 退出程序,返回错误码1# 获取命令行参数中的名字name = sys.argv[1]# 调用greet函数greet(name)def amazon():# 目标URLurl = 'https://www.shanghairanking.cn/rankings/bcur/2024'# 请求头,模拟浏览器行为,防止被服务器识别为爬虫headers = {'Connection': 'keep-alive','Cache-Control': 'no-store, no-cache, must-revalidate','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36','Accept': '*/*','Accept-Encoding': 'gzip, deflate, br, zstd','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Referer': 'https://www.shanghairanking.cn/rankings/bcur/2024',}# 创建一个会话对象,保持连接session = requests.session()# 先访问一次首页,模拟用户行为session.get('https://www.shanghairanking.cn')# 发送带有headers的GET请求并获取响应内容resHtml = session.get(url, headers=headers).content.decode('utf-8')# 使用BeautifulSoup解析HTML内容html_soup = BeautifulSoup(resHtml, 'html.parser')# 查找表格中的所有行all_goods_li = html_soup.find('table').find_all('tr')# 打开CSV文件准备写入with open('output.csv', 'wb') as csvfile:# 创建一个csv.writer对象csv_writer = csv.writer(csvfile)for row in all_goods_li:goods_info_list = []rank = row.find('div', class_="ranking")img_link = row.find('img')['src']name = row.find('span', class_='name-cn')tags = row.find('p', class_="tags")if name and img_link:goods_info_list.append(rank.get_text(strip=True).encode('utf-8'))goods_info_list.append(img_link)# 将name添加到列表中,并转换为UTF-8编码goods_info_list.append(name.get_text(strip=True).encode('utf-8'))goods_info_list.append(tags.get_text(strip=True).encode('utf-8'))csv_writer.writerow(goods_info_list)# 如果此脚本被直接运行,则执行amazon函数
if __name__ == '__main__':main()

如果你直接运行这个脚本:

python example.py world

控制台会输出:Hello, World!

作为模块导入如果你在另一个脚本中导入 example.py:

python">import example
example.greet("Alice")example.amazon()

则输出Hello, Alice!并执行amazon脚本。example.py 中的 if __name__ == '__main__': 块中的代码不会被执行,因为 example.py 是作为模块被导入的,其 __name__ 的值为 'example',而不是 '__main__'

注意事项

  • 命令行参数:确保在运行脚本时提供了正确的命令行参数。
  • 编码问题:确保使用正确的编码处理非ASCII字符。
  • 错误处理:可以添加异常处理逻辑来捕获并处理可能出现的错误。

http://www.ppmy.cn/server/120291.html

相关文章

Electron应用程序打包后运行报错cannot find module ‘@vue/cli-service‘

本项目打包运行后报错问题的解决办法&#xff0c;类似于其他cannot find module XXX’的报错&#xff0c;也基本可以解决 文章目录 electron应用程序打包后运行报错排查问题解决办法 electron应用程序打包后运行报错 错误如下&#xff1a; 提示找不到该模块 排查问题 本项…

山体滑坡检测系统源码分享

山体滑坡检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

通过FUXA在ARMxy边缘计算网关上实现生产优化

在当今工业4.0时代&#xff0c;智能制造的需求日益增长&#xff0c;企业迫切需要通过数字化转型来提高生产效率、降低成本并增强市场竞争力。ARMxy系列的BL340工业级ARM控制器&#xff0c;凭借其强大的处理能力和灵活的配置选项&#xff0c;成为实现生产优化的重要基础。 一、…

盲盒扭蛋机系统开发源码部署

盲盒扭蛋机系统的开发是一个综合性的项目&#xff0c;涉及前端展示、后端逻辑处理、数据库设计以及用户体验优化等多个方面。以下是一个概括性的开发流程和一些关键点&#xff1a; 一、需求分析 市场调研&#xff1a;了解盲盒扭蛋机市场的现状、用户需求、竞争对手情况等。 功能…

《使用 LangChain 进行大模型应用开发》学习笔记(四)

前言 本文是 Harrison Chase &#xff08;LangChain 创建者&#xff09;和吴恩达&#xff08;Andrew Ng&#xff09;的视频课程《LangChain for LLM Application Development》&#xff08;使用 LangChain 进行大模型应用开发&#xff09;的学习笔记。由于原课程为全英文视频课…

ChatGPT 4o 使用指南 (9月更新)

首先基础知识还是要介绍得~ 一、模型知识&#xff1a; GPT-4o&#xff1a;最新的版本模型&#xff0c;支持视觉等多模态&#xff0c;OpenAI 文档中已经更新了 GPT-4o 的介绍&#xff1a;128k 上下文&#xff0c;训练截止 2023 年 10 月&#xff08;作为对比&#xff0c;GPT-4…

LeetCode[中等]

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 思路&#xff1a; 计算链表长度num&#xff0c;num - n就是需要删去结点的索引 其中若删去第一个结点&#xff0c;返回head.next; /*** Definition for singly-linked list.* public …

Vue3与Flask后端Demo

文章目录 准备工作Flask 后端设置Vue3 前端设置跨域问题测试 准备工作 安装开发环境 安装 Python&#xff08;推荐 Python 3.8 或更高版本&#xff09;。安装 Node.js&#xff08;推荐 LTS 版本&#xff09;。安装 PyCharm&#xff08;用于 Flask 开发&#xff09;和 VSCode&am…