首页 > 其他分享 >requests, BeauitfulSoup

requests, BeauitfulSoup

时间:2024-07-18 23:29:04浏览次数:16  
标签:BeauitfulSoup get url reponse headers requests div

requests

requests.get()的基本使用

# 导入
import requests
# 不带参数get
reponse = requests.get('url')
# 带参数get

headers = {'referer': 'http://xxxxxx.net/',
           'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0'}
reponse = requests.get('url',headers=headers)

# 或者这样带参数
r1 = requests.get(url='http://dict.baidu.com/s', params={'wd': 'python'})  
print(r1.url)

>>> http://dict.baidu.com/s?wd=python

# 或者直接用url传参数
payload = {'keyword': '香港', 'salecityid': '2'}
r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload) 
print(r.url) 

>>> http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=香港
# 获取文本
reponse.text
# 获取图片和视频内容
reponse.content
# 获取编码
reponse.encoding = 'utf-8'
# 获取状态码
reponse.status_code
# 超时时间设置
r = requests.get('http://m.ctrip.com', timeout=0.001)
#第一次get/post的时候网站会返回一个cookies,有些时候post登录需要带cookies,以下语句用于获取cookies
reponse_cookie_dic = reponse.cookies.get_dict()

requests.post()的基本使用,提交登录信息或者把数据传给服务器的时候可以用

# post的基本使用方法

# 提交的参数
post_data = {
    "phone": '86'+'01234567890',
    'password': '123',
    'oneMonth': 1  # 一个月内免登陆
}
# 一定要添加浏览器,不然可能会遇到网络防火墙
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}

response = requests.post(
    url='https://xxxxx.com/login',
    headers =headers,
    data=post_data,
)
#返回的cookies
reponse_cookie_dic = reponse.cookies.get_dict()

# 用上面得到的cookies再次请求
response = requests.post(
    url='https://xxxxx.com/login',
    headers =headers,
    data=post_data,
    cookies=reponse_cookie_dic
)
# 使用代理来避免IP重复,格式是proxy_dict={'order'":'ip'+':'+'port'}的字典,可以搞一个ip代理池,用完就丢。
# proxies处就填入
response = requests.get(target_url, headers=headers, proxies=proxy_dict, timeout=30)

requests.session,自动保持cookies,不需要手动维护cookies

s = requests.Session()

# get请求
target_response = s.get(url=target_url, headers=target_headers)

配置超时及重连次数

from requests.adapters import HTTPAdapter
headers = dict() #创建字典
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
headers["Accept-Encoding"] = "gzip, deflate, sdch"
headers["Accept-Language"] = "zh-CN,zh;q=0.8"
headers["Accept-Language"] = "zh-CN,zh;q=0.8"
request_retry = HTTPAdapter(max_retries=3) #配置超时及重连次数

def my_get(url, refer=None):
    session = requests.session()
    session.headers = headers
    if refer:
        headers["Referer"] = refer
    session.mount('https://', request_retry) #mount挂载特定对话 代理
    session.mount('http://', request_retry)
    return session.get(url)

最简单的实现:靠random模块做ip池和user-agent的随机分配

#设置用户代理池
header_list = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0",
"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.3704.400 QQBrowser/10.4.3587.400"]
#设置ip池
ip_pools = ["123.54.44.4:9999",
"110.243.13.120:9999", 
"183.166.97.101:9999"]

random_ip = random.choice(ip_pools)
header = ("User-Agent", random.choice(header_list))

BeautifulSoup

# 导入
from bs4 import BeautifulSoup

# 解析,'html.parser'也可以改成'lxml'格式,lxml是唯一支持xml格式的解析器
soup = BeautifulSoup(reponse.text,'html.parser')

# 找到第一个标签,可以是a,div等任意html支持的标签
tag1 = soup.find('a')

#找到第一个id是d1的标签
tag2 = soup.find(id='d1')

# 找到第一个id是d1的div标签
tag3 = find('div',id='d1')

# find_all,返回所有满足条件的标签,这是个可迭代对象,用for遍历
# attrs填满足查询条件的属性
all_div = soup.find_all('div',attrs={'class':'card'})
for div in all_div:
    print(div.img['src'])

# select CSS选择器
soup.select("title")
soup.select("body a")
soup.select("#link1")
soup.select('a[href]')
soup.select("p > a")
li_list = soup.select("div.postlist ul#pins li")
href = bs(response.content, "lxml").select_one("div.main-image img").attrs["src"]

写入文件

# mkdir直接在当前.py文件的文件夹路径平级建立一个文件
if not os.path.exists("img"):
    os.mkdir("img")
if not os.path.exists("img/" + str(start_num)):
    os.mkdir("img/" + str(start_num))
with open("img/" + str(start_num) + "/" + img_name + ".jpg", 'wb') as fs:
    fs.write(src_reponse.content)
    print ("download success!")

标签:BeauitfulSoup,get,url,reponse,headers,requests,div
From: https://www.cnblogs.com/xiacuncun/p/18310608

相关文章

  • 基于PySide6与requests的多功能B站小帮手软件GUI界面设计并打包为exe文件
    小生今日闲来无事,学习了PySide6,并基于PySide6为之前写过的爬虫程序设计了GUI界面,和ffmpeg一起打包成一个exe文件,做成一个面向大众群体的软件。该软件目前仍在持续更新中,目前是0.6.0版本喵。先放一张软件GUI成品图喵:话不多说,我们直接讲解喵~0.导入库下面是本程序所有......
  • python 基础中requests 验证码
    验证码登录importrequests#古诗文网登录页面的URL地址url='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTM......
  • python 基础10 requests
    requests官方文档:https://requests.readthedocs.io/projects/cn/zh-cn/latest/快速上手https://requests.readthedocs.io/projects/cn/zh-cn/latest/user/quickstart.html安装找到目标路径Scriptspipinstallrequests-ihttps://pipy.douban.com/simple发送请求简洁:im......
  • python-requests库
    request库里边传参时params和data和json的区别:params=params是get请求的参数,传入后等同于'https:xx.com/search?q=python&cat=1001'data是post请求的参数,.post(url,data=params),使用application/x-www-form-urlencoded编码json是post请求的参数:.post(url,json=params),内部自......
  • python爬虫1-requests库
    requests库requests提供发送网络请求和处理响应的方法安装pipinstallrequestsGET请求importrequestsurl='https://www.baidu.com/'#urlparams={'key1':'value1','key2':'value2'}#参数#发送get请求......
  • 4、爬虫-数据获取之双R(CS/BS)与chrom检查工具使用-requests请求
    模拟客户端请求服务端:  ·模拟请求行和请求头、请求体 """模拟客户端请求获取静态数据和动态数据使用python自己去构造请求使用request""""""请求的构成:请求行、请求头、请求体"""###########################静态页面加载请求的##############################......
  • 10、爬虫-requests的使用-session()、防盗链
    #会话-cookie的使用requests.session()"""先登录网站、找到llogin相关的url得到cookie、拿到formatData中的信息带着cookie去请求url使用cookie去访问(session-会话)该网站其它内容的时候都会带着cookie"""importrequests#创建会话session=requests.session()#用户......
  • git检查别人提交的PR(pull requests)并在本地验证,然后合并
    可以看官方流程:Checkingoutpullrequestslocally-GitHubDocs当别人给你的开源仓库提交了pullrequest,你该怎么检查别人提交的代码是否可用,然后合并上去呢?今天我就遇到了,就在前不久开源项目douyin-live失败了,需要开启signature字段校验,研究了两天后发现需要使用浏览器......
  • requests模块处理cookie
    requess模块处理cookie相关的请求学习目标掌握requests处理cookie的三种方法1爬虫中使用cookie为了能够通过爬虫获取到登录后的页面,或者是解决通过cookie的反扒,需要使用request来处理cookie相关的请求1.1爬虫中使用cookie的利弊带上cookie的好处能够访问登录......
  • requests 开启charles代理报错
    当前报错urllib3版本:1.26.7解决代理报错的几种方式:配置代理请求proxies={'http':'http://127.0.0.1:8888','https':'http://127.0.0.1:8888'}data=requests.post(url,json=body,headers=headers,verify=False,pr......