requests爬虫(深入部分,自学自用)

requests爬虫

通过正则表达式爬取https://movie.douban.com/top250电影网站的电影标题,将该网站所有的h2标签内的内容(标题)提取出来。

import re
import requests

r = requests.get('https://movie.douban.com/top250')
pattern = re.compile('<a.*?>(.*?)</a>',re.S)
title = re.findall(pattern,r.text)
print(title)

爬取一个网站的小图标

就是在一个网址后面加上/favicon.ico。将爬取出来的小图标在文件中以二进制的形式写入。

r = requests.get('https://movie.douban.com/top250/favicon.ico')
# wb:把图片以二进制的形式写入
with open('favicon.ico', 'wb') as f:
    f.write(r.content)

以二进制的方式打开之前插入的图片,在https://httpbin**.org/该网站会判断如果客户端发起的是 GET 请求的话,它返回相应的请求信息。然后将读取的信息以字典的形式填入信息。

f = {'file':open('favicon.ico','rb')}
r = requests.post('https://movie.douban.com/top250/post',files=f)
print(r.text)

这里爬取一下github:

header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'Cookie':'_octo=GH1.1.199807212.1657939903; logged_in=yes; dotcom_user=minetobe; color_mode={"color_mode":"auto","light_theme":{"name":"light","color_mode":"light"},"dark_theme":{"name":"dark","color_mode":"dark"}}; preferred_color_mode=light; tz=Asia/Shanghai'
}

r = requests.get('https://github.com/',headers=header)
print(r.text)

获取cookie值

获取自己设置的cookie值:

s = requests.Session()
s.get('https://movie.douban.com/top250/cookies/set/number/123456')
r = s.get('https://movie.douban.com/top250/cookies')

print(r.text)

爬虫越过网站警告方式

有些网站的SSL证书过期了或者没被CA机构认可就会出现警告报错,我们爬取该网站的时候就会报443.那我们就需要忽视或者跳过这个警告。

忽略警告方法一:

由于访问时会报警告,使用urllib3

import requests
from requests.packages import urllib3

urllib3.disable_warnings()
response = requests.get('https://movie.douban.com/top250',verify=False)
print(response.status_code)

忽略警告方法二:

通过捕捉警告到日志的方式忽略警告

import logging

logging.captureWarnings(True)
requests = requests.get('https://movie.douban.com/top250',verify=False)
print(requests.status_code)

设置超时响应,防止服务器报错直接退出得莫名其妙,或者要响应很久浪费时间

这里可以设置一个响应时间(单位是s),如果超过这个时间就会抛出异常。

import requests

r = requests.get('https://movie.douban.com/top250', timeout=1)
print(r.status_code)

请求时间分为的是两个阶段(连接和读取)上面那种是直接统计这两个阶段的时间,也可以用元组分开来指定。

import requests

r = requests.get('https://movie.douban.com/top250', timeout=(5, 30))
print(r.status_code)

也可以永久等待,也就是不设置timeout的参数,或者把参数改为None

请求需要登录验证的网页

可以直接通过auth参数可以在其中输入对应的账号密码自动登录爬取(通过元组)。

r = requests.get('https://movie.douban.com/top250',auth=('admin','admin'))
print(r.status_code)

还可以从requests.auth中引入HTTPBasicAuth模块(其实就是加个HTTPBasicAuth):

r = requests.get('https://movie.douban.com/top250',auth=HTTPBasicAuth('admin','admin'))
print(r.status_code)

不用get方法来获取信息

其实用get方法发送请求是在内部自动构造Requests对象,赋予url,data,headers的参数。这里直接构造这三个的参数,不使用get或者post发送请求。

from requests import Request, Session

URL = 'https://movie.douban.com/top250/post'
data = {'name': 'germey'}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
# 调用Session的preparee_request方法将Request对象转换为Prepared Request对象,调用send方法发送。
s = Session()
req = Request('POST', URL, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)

还有个设置代理IP,来防止我们大规模爬取数据时网站直接封我们的IP

具体实施不知道出了什么问题我暂时还没搞出来,下来我自己研究一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值