爬虫 urllib、requests用法

urllib用法

from urllib import request
from urllib import parse
import json


url = 'http://top.hengyan.com/dianji/default.aspx?p=1'
# 构建请求头
headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
}
 """
 url :目标url
 data=None  :默认为None表示是get请求,如果不为None说明是get请求
 timeout:设置请求的过期时间
 cafile=None, capath=None, cadefault=False:证书相关参数
 context=None :忽略证书认证
 """
 # url不能添加请求头
 response = request.urlopen(url=url, timeout=10)

# 添加请求头
req = request.Request(url=url, headers=headers)
response = request.urlopen(req, timeout=10)

code = response.status
url = response.url
b_content = response.read()

html = b_content.decode('utf-8')

# 本地保存
with open('hengyan.html', 'w') as file:
   file.write(html)


#####################post请求#############################
# 世纪佳缘网
def get_ssjy_data(page=1):
    url = 'http://search.jiayuan.com/v2/search_v2.php'
    # 构建请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
    }

    form_data = {
        'sex': 'f',
        'key': '',
        'stc': '1:11,2:20.28,23:1',
        'sn': 'default',
        'sv': '1',
        'p': str(page),
        'f': 'search',
        'listStyle': 'bigPhoto',
        'pri_uid': '0',
        'jsversion': 'v5',
    }

    form_data = parse.urlencode(form_data).encode('utf-8')

    # 构建请求对象
    req = request.Request(url=url, data=form_data, headers=headers)
    response = request.urlopen(req, timeout=10)
    if response.status == 200:
        content = response.read().decode('utf-8').replace('##jiayser##//', '').replace('##jiayser##', '')
        data = json.loads(content)
        userinfos = data['userInfo']
        for user in userinfos:
            age = user['age']
            name = user['nickname']
            gender = user['sex']

        # 获取下一页
        total_page = int(data['pageTotal'])
        print(str(page) + '页爬取完毕')
        if page < total_page:
            # 需要继续提取下一页
            next_page = page + 1
            # 递归的方式,继续提取下一页数据
            get_ssjy_data(page=next_page)
        else:
            # 数据提取完毕
            print('数据爬取完毕')


if __name__ == '__main__':
    get_ssjy_data()

requests用法

一、什么是requests?
  • requests是基于urllib的再一次封装,具有urllib的一切特性,并且API调用更加方便,一个基于网络请求的模块,模拟浏览器发起请求
二、为什么使用requests模块?
  • 1.自动处理url编码
  • 2.自动处理post请求参数
  • 3.简化cookie和代理的操作
    • cookie的操作:
      • a.创建一个cookiejar对象
      • b.创建一个handler对象
      • c.创建一个opener对象
    • 代理的操作:
      • a.创建handler对象,代理ip和端口封装到该对象
      • b.创建opener对象
三、如何安装?
安装:pip3 install requests
使用流程:
1.指定url
2.使用requests模块发起请求
3.获取响应的二进制数据
4.进行持久化存储
requests包括五中请求:get,post,ajax的get请求,ajax的post请求,综合
requests的get请求
url = 'http://top.hengyan.com/dianji/default.aspx?'

# 将get请求的参数放在字典中
params = {
    'p': 1
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
}
response = requests.get(url=url, headers=headers, params=params)
# 获取html页面源码
html = response.text
# 获取页面的二进制数据
b_content = response.content
# 获取响应的状态码
code = response.status_code
# 获取请求的响应头
response_headers = response.headers
# 获取请求的url地址
url = response.url

# 获取cookies信息(使用requests模拟登陆网站后获取cookies)
cookies = response.cookies
# 将RequestsCookieJar转换成字典
cookies_dict = requests.utils.dict_from_cookiejar(cookies)
# 将字典转换成RequestsCookieJar
cookiesjar_obj = requests.utils.cookiejar_from_dict(cookies_dict)
requests的post用法
url = 'http://search.jiayuan.com/v2/search_v2.php'
# 构建请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
}

form_data = {
    'sex': 'f',
    'key': '',
    'stc': '1:11,2:20.28,23:1',
    'sn': 'default',
    'sv': '1',
    'p': '1',
    'f': 'search',
    'listStyle': 'bigPhoto',
    'pri_uid': '0',
    'jsversion': 'v5',
}
response = requests.post(url=url, data=form_data, headers=headers)

if response.status_code == 200:
    pattern = re.compile('##jiayser##(.*?)##jiayser//', re.S)
    json_str = re.findall(pattern=pattern, string=response.text)[0]
    json_data = json.loads(json_str)
自定义请求头信息:
from fake_useragent import UserAgent
定制请求头
headers ={
	"User-Agent":UserAgent().random
}
封装get请求参数:
params = {
	"变量名":"参数"
}
requests库中的session作用:
  • 维持统一会话,在跨请求访问的时候能够保存一些信息(比如cookies)
cookie:
1.基于用户的用户数据
2.需求:爬取xx用户的豆瓣网的个人主页数据
cookie作用:服务端使用cookie来记录客户端的状态信息
实现流程:
  • 1.执行登录操作(获取cookie)
  • 2.在发起个人主页请求时,需要将cookie携带到该请求中
  • 注意:session对象:发送请求(会将cookie对象进行自动存储)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值