网络爬虫入门(二):第一步Requests获取页面(静态获取)

一、获取页面

我们要爬取数据,就需要先去找到数据来源,即找到数据所在的页面,本节内容总结了利用Requests获取页面的方法。这种方法基本适合于所有静态页面(数据全部存储在静态html标签中,直接解析网页即可)和部分动态页面(只存有部分数据,更多其他数据需要在此页面下进一步动态加载。例如:AJAX局部动态更新)。
我们暂时先研究静态页面,即默认只要获取了页面,就可以得到我们所需的所有数据内容。

二、基本流程

首先我们需要用到爬虫所必备的第三方库Requests。顾名思义,Requests库的作用就是发送http请求指令,从而获取我们想要爬取的目标页面。我们通过在终端中输入一下命令来安装Requests

pip install requests

requests库中所提供了发送http请求最重要的两个请求方式,get请求和post请求,我们可以根据需要自身需要来使用,一般来说,大多数网页的获取都采用的是get请求

//get请求和post请求,其中get分为有参数和无参数
key-value-dict = {'key1':'value1','key2':'value2'}
 
res1 = requests.get("url")
res2 = requests.get("url",""params=key-value-dict)  //参数加载在URL中
res3 = requests.post("url",data=key-value-dict)  

返回的res对象即包含了我们所请求的目标网页内容,同时还包含了其他response请求信息,我们可以通过以下方法查看

r.text //查看网页HTML
r.encoding //查看网页编码格式
r.status_code //查看响应的状态码

此外requests还有一些其他的参数,从而对请求做更高级的规定处理

三、设置请求头(Headers)

设置请求Headers:http协议中要求每一个请求都需要加一个Headers内容,其中封装了请求访问方式的参数,用于区分不同的请求内容。我们用浏览器上网也是如此,只不过Headers中的内容是浏览器自动帮助我们填充的。很多网站通过查询Headers中的user-agent来来判断一个请求是来着一个爬虫的还是来自一个浏览器的,所以,为了更好的隐藏我们爬虫的身份,我们需要手动填充一些内容,以使服务器认为这是一条正常的浏览器访问请求。

首先我们需要获取正确的Headers,以Chrome浏览器为例,我们在打开一个网站之前,先右键->检查,然后在工具列表中选择Network,然后打开我们想要访问的网页,可以在Network中看见加载此页面中的所有数据流
在这里插入图片描述
然后我们找到当前页面的数据流,点击之后在右侧就可以找到此次的requests请求的headers了
在这里插入图片描述
可以看到headers中定义了很多的参数,这些参数都是通过key-value对的形式进行声明。所有的参数中,最重要的两个是user-agent和host

//自定义一个headers
headers = 
{
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
				AppleWebKit/537.36 (KHTML, like Gecko) 
				Chrome/83.0.4103.116 Safari/537.36',
	'Host': 'www.baidu.com'
}
//带自定义Headers的请求
res = requests.get("url", headers = headers)

其中user-agent用于标明此次请求是从哪里发起,如果我们不加的话,python会自动帮我们填上“python-requests/版本号”。一些严格的网页为了防止爬虫大量进入会禁止来自不明地方的请求,有时候为了能够顺利获取页面信息,我们需要窃取浏览器的外衣,把自己包裹在浏览器的皮囊下进入。
host是用来标注此次请求申请的是哪个网站,一般和我们get中写的url主域名保持一致,不然可能会出现异常。

四、超时响应

有时候爬虫遇到服务器长时间无返回的情况下,可能会出现死等的现象,从而影响了后序进程的运行。为了避免这样的事情发生,我们需要设置timeout参数来规定在发送request后等待的时长,如果到时间后没有收到response,就返回一个异常。

//设置此次访问的超时时长
res = requests.get("url",timeout=20)

以上就是爬虫的第一步-------获取页面。此时我们已经可以将远在服务器中的数据源下载到我们本地了,接下来就是如何从这个数据源中提取出我们要的数据内容。

<think>好的,用户想学习Python网络爬虫的基础知识,需要一个入门教程。我需要结合用户提供的引用内容来构建回答。首先,用户提到的引用[1]提到需要预先掌握Python的基础知识,比如函数、列表、文件操作等,这点很重要,应该作为学习前提放在前面。然后引用[2]和[3]提供了爬虫的基本流程和代码示例,我需要将这些整合到教程中。 接下来,要确保回答结构清晰,分步骤讲解。第一步是学习前提,列出需要掌握的Python知识。第步是爬虫的基本流程,包括请求网页、解析数据、存储数据,每个步骤都要给出对应的库和示例代码。例如,使用requests库发送请求,用BeautifulSoup解析HTML,用pandas保存数据。引用中的代码示例需要检查是否符合LaTeX格式要求,但用户的问题里并没有数学公式,所以可能不需要处理这部分。不过用户给的示例中有代码块,我需要用三个反引号包裹代码,并标明语言。 然后,引用[3]中的urllib示例可能比较基础,但requests库更常用,所以可能优先介绍requests。同时,要提到异常处理,如处理HTTP错误和URL错误,这部分可以放在请求网页的步骤里,并给出示例代码。 最后,生成相关问题,比如爬虫的法律问题、动态内容处理、数据清洗等,这些能帮助用户进一步学习。需要确保引用标记正确,比如在提到保存数据到CSV时引用[2],在提到urllib时引用[3],在前提条件处引用[1]。 还要注意用户不可见的系统指令,比如数学公式用$...$,但爬虫内容可能涉及较少数学,所以可能不需要。但如果有变量或代码中的数学符号,需要正确格式化。不过当前内容中可能没有,所以可以忽略这部分。 总结下来,回答的结构应该是:学习前提、基本流程(分步骤,每步有代码示例)、总结与建议,最后是相关问题。需要确保引用正确,代码格式正确,使用中文,并且自然融入引用标记。</think># Python网络爬虫入门教程 ## 一、学习前提 需要掌握以下Python基础: - 数字/字符串类型 - 分支循环结构 - 函数定义与调用 - 列表/字典操作 - 文件读写 - 第三方库安装 [^1] ## 、爬虫基本流程 ### 1. 请求网页 使用`requests`或`urllib`发送HTTP请求: ```python import requests try: response = requests.get('https://www.python.org', timeout=5) print(f'状态码: {response.status_code}') print(f'网页内容前100字符: {response.text[:100]}...') except requests.exceptions.RequestException as e: print(f'请求失败: {str(e)}') ``` [^3] ### 2. 解析数据 使用`BeautifulSoup`解析HTML: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') title = soup.find('title').text links = [a['href'] for a in soup.find_all('a')] print(f'网页标题: {title}') print(f'前3个链接: {links[:3]}') ``` ### 3. 存储数据 使用`pandas`保存到CSV: ```python import pandas as pd data = {'链接': links} df = pd.DataFrame(data) df.to_csv('python_links.csv', index=False) print('数据已保存到python_links.csv') ``` [^2] ## 三、总结与建议 1. 初学建议从静态网页开始练习 2. 推荐学习`XPath`和`正则表达式`进阶解析 3. 注意遵守网站的`robots.txt`协议 4. 学习使用`Selenium`处理动态加载内容[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值