python爬虫初入门——基本库和写入方法

1.准备环境

  1. python环境:3.10

2.常用库

1.请求库:实现 HTTP 请求操作

  1. requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
  2. selenium:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。

2.解析库:从网页中提取信息

  1. Beautifulsoup:html 和 XML 的解析,从网页中提取信息,同时拥有强大的API和多样解析方式。
  2. lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
  3. json:可以将数据格式转化为json格式更便于解析读取。
  4. re:利用正则表达式提取数据。

3.其他常用库

  1. fake_useragent库

引入:from fake_useragent import UserAgent

用法:实现请求头伪装

# 请求头伪装
ua = UserAgent()
header = {
'User-Agent':ua.chrome}

3.安装方式

添加库的方法:

1.Windows+R打开运行,然后输入CMD进入命令提示符。

2.输入:where python 。就会反馈出python安装地址。

3.cd C:\Program Files\Python39\Scripts(cd+安装目录下的Scripts文件夹,可以先找到文件夹,以防找错地址)

4.输入各种更新语句

更新pip:python -m pip install --upgrade pip

更新某库(如requests库):pip install requests

更新某库指定版本:pip install bert4keras==0.5.9

pip换源

通过pip install添加库时会因为从国外地址下载,连接速度特别慢。国内一些有担当的高校和公司会通过建立镜像源,来帮助国内用户从其服务器下载,更方便去学习python。

换源语句

换源如:换阿里源语句

pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ 
pip config set global.trusted-host mirrors.aliyun.com

一些其他源

国内源:

清华:Simple Index

阿里云:Simple Index

中国科技大学 Verifying - USTC Mirrors

华中理工大学:http://pypi.hustunique.com/

山东理工大学:Loading...

豆瓣:http://pypi.douban.com/simple/

库的查询方法
pip list

我们可以通过命令查看python安装了哪些库,cmd直接输入pip list,可以看到所有库和版本。

4.发送请求

1.请求准备

  • url请求链接,首先是写入准备要请求的url
  • header请求头,有些网站会对user-agent进行校验来区分爬虫和浏览器请求,这里我们可以利用fake_useragent库里的ua.chrome方法来伪装我们的user-agent
url = 'http://www.baidu.com'
header = {'User-Agent': ua.chrome
}

2.请求方式

这里我们主要介绍两种最主要的请求方式

1.get请求
url = 'https://www.baidu.com'
header = {'User-Agent':ua.chrome
}
response = requests.get(url=url,headers=header,params=None)

这里requests.get()后面包含了多个参数,params是携带的参数,这里可能涉及到分页或者其他属性等等。

查看响应状态码和响应文本

print(response.status_code)
print(response.text)

  • 常见的响应状态码:

200 ok:请求成功

301 Move Permanently:永久重定向,以前的url已经过期

302 found:临时重定向

403 Forbidden:服务器拒绝访问

404 not found:资源未找到

500 Internal Server Error:服务器内部错误

这里我们请求百度,响应状态码200,请求成功,获得的文本就是网页的内容。

2.post请求

这里我们以请求广州市政府政策为例:

url = 'http://search.gd.gov.cn/api/search/all'
header = {'User-Agent': ua.chrome
}
d = {'gdbsDivision': "440100",'keywords': "人才",'page': 1,'position': "title",'range': "site",'recommand': 1,'service_area': 200,'site_id': "200001",'sort': "time"
}
response = requests.post(url=url, headers=header, data=d)

这里的data是post请求必须携带的请求参数,服务器会进行校验,根据你请求的数据来返回你想要的数据。

3.selenium模拟浏览器请求

作用:常用于一些数据属于懒加载,请求不到完整数据。或者是存在反爬,cookie,wordtoken校验时无法获取数据时,模拟真实浏览器向服务器发出请求,获取网页源代码再进行解析

a.前置环境

chrome浏览器和对应的chromedriver版本(117对应117版本 不能高也不能低)

Chromedriver下载地址:国内镜像网站CNPM Binaries Mirror

b.发送请求
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.shanghai.gov.cn/'
browser.get(url)

依靠上述代码,就已经对浏览器发出了请求,我们可以通过xpath对页面上的各种输入框,按钮等各种组件进行定位,操控浏览器进行数据请求的操作。常常配合time.sleep()来等待服务器数据加载。

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.shanghai.gov.cn/'
browser.get(url)
time.sleep(1)
# 通过xpath定位输入框
input_area = browser.find_element_by_xpath('//*[@id="search-input"]')
# 定位按钮
button = browser.find_element_by_xpath('//*[@id="searchBtn"]')
# 往输入框内输入内容
input_area.send_keys('人才政策')
# 点击按钮
button.click()
time.sleep(1)
# 切换浏览器页面
browser.switch_to_window(browser.window_handles[1])
print(browser.title)
print('finish')
# 关闭浏览器
browser.quit()

这时我们进入了页面,页面上的数据都可以通过xpath或则bs来进行提取。

5.解析响应数据

1.解析json格式数据

json_data = json.loads(response.text)

直接调用json库的loads方法,将响应数据解析成json格式数据之后,json_data对象的类型变成了一个dict字典类型,更方便索引读取响应数据。

2.etree的xpath解析

etree可以解析文本也可以解析HTML超文本标记

tree = etree.HTML(response.text)
# /html/body/div/div[1]/table/tbody/tr[16]/td[2]/a 2-16
# /html/body/div/div[1]/table/tbody/tr[16]/td[4]
for i in range(2,17):title = tree.xpath('/html/body/div/div[1]/table/tbody/tr['+str(i)+']/td[2]/a/text()')[0]href = tree.xpath('/html/body/div/div[1]/table/tbody/tr['+str(i)+']/td[2]/a/@href')[0]ts = tree.xpath('/html/body/div/div[1]/table/tbody/tr['+str(i)+']/td[4]/text()')[0].strip()

这里我们解析HTML通过xpath路径直接获取对应的web元素,可以进行多次解析,返回的对象是一个list列表。

可以通过/text()来获取文本内容,通过/@href来获取对应的属性值。

6.数据存储

1.写文件

f = open('文件名.txt', mode='w', encoding="utf-8")
f.write('写入文件的内容')
# 关闭文件 自动刷新写入内容
f.close()

2.写入excel表格

# 引入相关库
import xlwt
import xlrd# 创建workbook对象 工作簿
workbook = xlwt.Workbook(encoding='utf-8')
# 工作表
worksheet = workbook.add_sheet("sheet1", cell_overwrite_ok=True)  # 默认是不可覆盖 改为可以覆盖内容 这样可以实时更新表单
# 设置单元格宽度
worksheet.col(5).width = 256 * 40
worksheet.col(1).width = 256 * 40
# worksheet.col(4).width = 256 * 12
# 写入标题 
# 第0列 0行 写入'内容'
worksheet.write(0,0,'内容')
# 保存并命名工作簿
workbook.save('gz.xls')

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

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

相关文章

Sonar扫描C#代码配置

需要的工具 MSBuild、sonar-scanner-4.6.1.2450-windows、jdk1.8.0_181 下载地址:https://download.csdn.net/download/code12313/91315686 配置sonar的地址 一、环境变量配置 1.新建变量,nameSONAR_RUNNER_MSBUILD_HOME。valueD:\work\dev\dev_serve…

python 在运行时没有加载修改后的版本

陈旧的Python字节码 (.pyc 文件):最常见的原因!Python 会把你修改的 .py 文件编译成 .pyc 字节码来加速后续运行。有时,即使你修改了 .py 文件,系统可能仍然固执地加载旧的、未被删除的 .pyc 文件。1. 用“硬编码探针”强制验证# …

【会员专享数据】2013-2024年我国省市县三级逐年SO₂数值数据(Shp/Excel格式)

之前我们分享过2013-2024年全国范围逐年SO₂栅格数据(可查看之前的文章获悉详情)!该数据来源于韦晶博士、李占清教授团队发布在国家青藏高原科学数据中心网站上的中国高分辨率高质量近地表空气污染物数据集。很多小伙伴拿到数据后反馈栅格数据…

出现SSL连接错误的原因和解决方案

介绍 SSL连接错误是一种常见但关键的问题,这可能会阻止客户端和服务器之间的安全连接。这些错误发生在TLS握手过程失败时,这意味着客户端和服务器无法建立安全的HTTPS连接。这种失败可以在SSL/TLS协商过程中的任何阶段发生,从初始协议协议到…

vue3 el-date-picker 保存后 日期减一问题

在使用 el-date-picker(Element UI 的日期选择器组件)时,如果你发现日期在保存到后台后自动减一,这通常是由于时区差异或者是时间格式解析问题导致的。这里有一些可能的解决方案:1. 检查前端发送的日期格式确保你在前端…

什么是IP关联?跨境卖家如何有效避免IP关联?

一位深圳卖家曾管理30个亚马逊店铺账号,某日清晨发现所有账号被批量封禁——原因竟是平台检测到这些账号长期共享同一IP地址,判定为“IP关联”。而在跨境领域如亚马逊、eBay、Shopee、TikTok等平台),对于IP关联的判定都是比较严格…

Redis集群方案——哨兵机制

Redis Sentinel(哨兵)是Redis官方提供的高可用性(HA)解决方案,用于管理Redis主从架构并实现自动故障转移。一、集群结构和作用哨兵是一个分布式系统,由多个哨兵节点组成:哨兵的作用如下:监控:Se…

1.2.3_2 TCP/IP模型

在这个视频中,我们要探讨TCP/IP模型。对于TCP/IP模型考试的要求是这样的,首先我们需要记住它各个层次的名称和顺序,以及我们需要了解TCP/IP 模型和OSI参考模型,它们在设计理念上有哪些区别,设计理念的区别又导致了TCP/…

EVOLVEpro安装使用教程-蛋白质语言模型驱动的快速定向进化

写在前面:蛋白质是生命活动的基石,其功能和序列之间的复杂关系长期以来吸引着科学家们的关注。尽管深度突变扫描等实验方法可以解析蛋白质突变的功能影响,但这些技术的应用范围局限于序列空间的一小部分。近年来,基于蛋白质语言模…

【Linux】Rocky Linux 清华镜像源安装 GitLab

使用清华镜像源安装 GitLab 地址:清华镜像源 1. 搜索 gitlab,我们选择 gitlab-ce 社区版进行安装 2. 新建 /etc/yum.repos.d/gitlab-ce.repo,内容为 注意:el$releasever 是清华镜像源内的文件夹版本 [gitlab-ce] nameGitlab C…

【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】

产品简介新能源汽车维护与动力蓄电池检测仿真教学软件是依托《全国职业院校技能大赛》“新能源汽车维修”赛项中“新能源汽车维护与动力蓄电池检测” 竞赛模块,自主开发的一款仿真教学软件。软件采用仿真技术对车辆进行指定维护作业,并对动力蓄电池总成进…

UE5多人MOBA+GAS 18、用对象池来设置小兵的队伍的生成,为小兵设置一个目标从己方出生点攻打对方出生点,优化小兵的血条UI

文章目录根据小兵队伍更换小兵的皮肤管理小兵的生成使用对象池来管理小兵的生成为小兵设置一个目标小兵生成完整代码调整一下小兵的UI根据小兵队伍更换小兵的皮肤 懒得开UE了,增加一个Minion类继承基类角色CCharacter // 幻雨喜欢小猫咪#pragma once#include &qu…

Clojure持久化数据结构的底层实现

文章目录一、Clojure的持久化数据结构二、向量(Vector)/Map的底层结构​1. HAMT 哈希数组映射字典树(1)简介(2)HAMT 的核心思想(3)HAMT 的结构​a. 基本组成​b. 树的分支因子​(4)H…

面试150 二叉树展开为链表

思路 思路:使用列表存储先序遍历的相关节点。然后遍历列表,分别获取前驱节点和当前节点,将前驱节点的左指针指向空,前驱节点的右指针指向当前节点。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, …

代码随想录算法训练营第十七天

目录 LeetCode.654 最大二叉树 题目链接 最大二叉树 题解 解题思路 LeetCode.617 合并二叉树 题目链接 合并二叉树 题解 解题思路 LeetCode.700 二叉搜索树中的搜索 题目链接 二叉搜索树中的搜索 题解 解题思路 解题思路 LeetCode.98 验证二叉搜索树 题目链接 验…

pycharm无法识别pip安装的包

在使用conda创建一个新的环境后,有些包通过pip的方式安装更方便有效,若在pip安装后,遇到该环境没有此包,或pycharm监测不到此包,通常是pip的环境指向有问题。 解决措施: # 首先检查当前pip的指向 which pip…

Elasticsearch 的 `modules` 目录

Elasticsearch 的 modules 目录是存放**核心功能模块**的目录,这些模块是 Elasticsearch 运行所必需的基础组件,**随官方发行版一起提供**,但设计上允许通过移除或替换模块来**定制化部署**(比如构建一个最小化的 Elasticsearch 实…

https——TCP+TLS

https——TCPTLS主题:基于mbedtls-2.16.0,验证TLS会话复用功能验证环境:1.TLS服务端2.TLS客户端2.1 基于Sesssion ID2.1.1mbedtls-2.16.0库的宏配置2.1.2 初始化配置2.1.3 TCP连接2.1.4 首次TLS连接2.1.4.1 发送加密算法列表2.1.4.2 选择加密…

uni-app uni-push 2.0推送图标不展示问题

问题现象:我在uni-app的配置文件,配置了推送的大图标小图标发现在真机测试无法展示配置的推送图标问题 官网文档:开通 | uni-app官网 解决方法: 在uni-app官网中说的并不是很清楚只给了一个简单的示例,配置并没有告诉我…

scp:上传大型数据集到实验室服务器

我通过百度网盘下载了大概200GB的LUNA-2016的肺结节CT数据。实验是在实验室服务器上进行的,我现在需要将本地的数据集传输到实验室的服务器上。我已经通过remote-ssh连接上了实验室的服务器,但是如果通过这个插件上传数据的话,一方面不支持上…