爬虫的初步学习
1.GET与POST请求:
当我们在浏览器中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL中。至于POST请求,它大多于表单提交时发起,其数据是以表单形式传输,并不会体现在URL中。
二者区别:
a、GET是请求页面并返回页面内容,其请求中的参数包含在URL中,数据可以在URL中看到,而POST请求的URL中不会包含这些数据,数据大都是通过表单形式传输的,会包含在请求体中。
b、GET请求提交的数据最多只有1024字节,而POST方式没有限制。
一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用GET方式请求的话,密码就会暴露在URL中,造成密码泄露,所以这里最好以POST方式发送。上传文件时,由于文件内容过大,也会用POST方式。
随即请求头
# 导入UserAgent类
from fake_useragent import UserAgent
ua = UserAgent()
#第一次使用UserAgent时,会从互联网上下载浏览器标志数据库
#如果网速较慢的话,会出现报错,多试几次就好了。
#print(ua.ie) # 获取IE浏览器标志
print(ua.random) # 获取一个随机的浏览器标志
# 如果要写在一行:UserAgent().random
获取网页数据
import requests
from fake_useragent import UserAgent
def get_html(url,times):
'''
这是一个用户获取网页源数据的函数
:param url: 目标网址
:param times: 递归执行次数
:return: 如果有,就返回网页数据,如果没有,返回None
'''
try:
res = requests.get(url = url,headers = {"User-Agent":UserAgent().random) #带上请求头,获取数据
if res.status>=200 and res.status<=300: #两百打头的标识符标识网页可以被获取
return res
else:
return None
except Exception as e:
print(e) # 显示报错原因(可以考虑这里写入日志)
if times>0:
get_html(url,times-1) # 递归执行
ID遍历爬虫
import time
def get_ID_html(url_pool,res_pool):
'''
这是一个用ID循环去下载网页的函数
:param url_pool: url池
:param res_pool:返回值池
:return: 无
'''
while url_pool:
for url in url_pool:
try:
res = requests.get(url=url, headers = {"User-Agent":UserAgent().random) # 带上请求头,获取数据
url_pool.remove(url)
res_pool.append(res)
except:
pass
finally:
time.sleep(2)