爬虫基础之requests模块

requests介绍

requests模块Python网络爬虫中一个专业用于模拟浏览器发送网络请求的模块,其功能之强大,用法之简单超乎了你的想象。所以掌握了requests模块的应用,也就证明你掌握了爬虫世界的半壁江山

安装

pip进行安装:pip insrall requests

requests的get请求

import requests

url = "https://www.sogou.com/web"

# 对url携带的参数进行字典形式的封装,封装好后,将字典赋值给get方法的params参数即可
param = {
    'query':'美女图片'
}

response = requests.get(url=url,params=param)

page_text = response.text
#文件实例化
fp = open('./meinv.html','w',encoding='utf-8')
fp.write(page_text)
fp.close()

响应对象的相关操作

#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象
response = requests.get(url)

#获取请求的url
print('请求的url:'+response.url)

#获取响应状态码
print(response.status_code)

#获取响应内容的编码格式,可以通过该属性修改响应的编码格式
print('响应内容编码:'+response.encoding)

#获取响应对象的响应头信息:
print(response.headers)

#获取字符串形式的响应内容
print(response.text)

#获取字节形式的响应内容
print(response.content)

定制请求头信息

在请求头中有一个参数为User-Agent,表示含义为请求载体的身份标识。通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识。爬虫程序想要尽可能的模拟浏览器发起的请求,则必须将User-Agent修改成浏览器的身份标识

【注意】User-Agent的定制其实是一种反反爬虫的初级技术手段。所以在编写爬虫程序时,必须对User-Agent进行手动定制。User-Agent的值可以通过抓包工具从浏览器请求的请求头中获取

import requests

url = 'http://www.baidu.com'


#定制请求头信息(在url下面添加)
headers = {
    # 对UA进行重写操作(伪装)
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}

#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象
#参数1:发起请求指定的url
#参数2:手动定制的请求头信息
response = requests.get(url=url,headers=headers)

requests的post请求

# 登录豆瓣电影,爬取登录成功后的页面数据

import requests

#登录成功后拿到的数据
#1 指定url
url = 'https://accounts.douban.com/login'

# 进行post请求的参数处理
data = {
    'ck':'TNmg',
    'source':'movie',
    'redir':'https://movie.douban.com/',
    'form_email':'1506353195@qq.com',
    'form_password':'xing150635',
    'login':'登录'
}

2 请求发送 post
#headers 表示的是自制定的请求头信息
headers = {
    # 对UA进行重写操作(伪装)
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}

response = requests.post(url=url , data=data ,headers=headers)

#3 获取响应数据
page_text = response.text

#4 持久化
fp = open('./douban.html','w',encoding='utf-8')
fp.write(page_text)
fp.close()

基于Ajax的get请求

#需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据

import requests


url = 'https://movie.douban.com/j/chart/top_list?'

#针对get请求参数处理
param = {
    'type':'13',
    'interval_id':'100:90',
    'action':'',
    'start':'40',
    'limit':'20',
}
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
response = requests.get(url=url,params=param)
print(response.text)

参数获取方法

基于Ajax的post请求

import requests

# 肯德基餐厅查询数据爬取 http://www.kfc.com.cn/kfccda/index.aspx

url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}

data = {
    'cname':'北京',
    'pid':'',
    'keyword':'北京',
    'pageIndex':'3',
    'pageSize':'10',
}

response = requests.post(url=url,data=data,headers=headers)
print(response.text)

requests爬取分页的页面数据

import requests

# 获取搜狗知乎指定词条指定页码下的页面数据

url = 'https://zhihu.sogou.com/zhihu?'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
word = input('enter a word:')
start_page = int(input('start page:'))
end_page = int(input('end page:'))

for page in range(start_page,end_page+1):
    param = {
        'query':word,
        'page':str(page)
    }
    response = requests.get(url=url,params=param,headers=headers,proxies={"http":'199.254.222.96:80'})
    #proxies后面跟代理ip,地址可从该网站获取
    page_text = response.text

    file_name = word + str(page) + '.html'
    with open(file_name,'w',encoding='utf-8') as fp:
        print('爬取倒了第%s页的数据'%page)
        fp.write(page_text)

 获取糗图百科中糗图数据

# 获取糗事百科所有糗图下载

import request
import os
import re

# 判断文件存储目录是否存在
if not os.path.exists('qiutu'):
    os.mkdir('qiutu')

url = 'https://www.qiushibaike.com/pic/'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}

response = requests.get(url=url,headers=headers)

page_text = response.text

#数据解析:将页面中所有的图片数据爬取
# 根据正则获取的页面源码中所有的图片链接
img_url = re.findall('<div class="thumb">.*?<img src="(.*?)" .*?',page_text,re.S)
# 根据图片链接发起请求,获取图片的二进制数据
for url in img_url:
    url = "https:" + url
    img_response = requests.get(url=url,headers=headers)
    # 获取二进制数据 bytes
    img_data = img_response.content
    imgName = url.split('/')[-1]
    imgPath = 'qiutu/' + imgName
    with open(imgPath,'wb') as fp:
        print(imgPath + '存储成功!')
        fp.write(img_data)

 

posted @ 2018-10-30 15:20  叫你你敢答应么  阅读(162)  评论(0)    收藏  举报