热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Day022requests与bs4

requestspython基于http协议进行网络请求的的三方库importrequests发送请求requests.get(url,*,headers,params,pro

requests


  • python基于http协议进行网络请求的的三方库

import requests

发送请求


  • requests.get(url, *, headers, params, proxies) - 发送get请求

  • requests.post(url, *, headers, params, proxies) - 发送post请求

  • 参数:

    • url - 请求地址(一个网站的网址、接口地址、图片地址等)
    • headers - 设置请求头(设置COOKIE和User-Agent的时候使用)
    • params - 设置参数
    • proxies - 设置代理

# 1.1 发送get请求,参数直接拼接到url中
requests.get('www.xxx.com?key=1234567890&num=10')# 1.2 参数放在params参数中
params = {'key': '1234567890','num': '10'
}
requests.get('www.xxx.com',params=params)
requests.post('www.xxx.com', params=params)

添加请求头


添加User-Agent

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67'}
response = requests.get('https://www.51job.com', headers=header)
response.encoding = 'gbk'
print(response.text)

添加cooike

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67','COOKIE':'_zap'
}
response = requests.get('https://www.zhihu.com', headers=header)
print(response.text)

获取响应信息

response = requests.get('http://www.yingjiesheng.com/') # 获取网页对象

设置编码方式(乱码的时候才需要设置)

response.encoding = 'GBK' # 设置编码方式

获取响应头

head = response.headers # 获取响应头
# print(head)

获取响应体


获取text值


  • 用于请求网页,拿到网页源代码

res_text = response.text
# print(res_text)

获取json解析结果


  • 用于返回json数据的数据接口

res_json = response.json()
# print(res_json)

获取content值


  • 获取二进制类型的原数据,用于图片、视频、音频的下载

res_con = response.content
# print(res_con)

json解析

# 今日头条json数据接口获取数据
url = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc&_signature=_02B4Z6wo00d01lV7XNAAAIDC1XmmkccfxtZVX1hAAPRc4q1lffyoHnSH6QUjeMpESOysibusQzMT4SFKQRYqPcysxXX0rosf5v95jp--h4Twooxn1Q7PvJH1hggqpvwVxGkcisci55B1y4d-13'
response = requests.get(f'{url}')
res_json = response.json()['data']
for news in res_json:print(news['Title'])

图片下载

def download_image(img_url):# 请求网络图片数据response = requests.get(img_url)# 获取数据data = response.content# 保存数据到本地文件f = open(f'files/{img_url.split("/")[-1].split("!")[0]}', 'wb')f.write(data)print('下载完成!')if __name__ == '__main__':response = requests.get('https://www.58pic.com/tupian/qixi-0-0.html')result = findall(r'(?s)', response.text)for x in result:download_image(f'https:{x}')

千图网图片获取

from re import findall
import requestsdef download_image(img_url):# 请求网络图片数据response = requests.get(img_url)# 获取数据data = response.content# 保存数据到本地文件f = open(f'files/{img_url.split("/")[-1]}', 'wb')if __name__ == '__main__':url = ''regular = r''response = requests.get(url)result = findall(regular, response.text)

bs4的使用

from bs4 import BeautifulSoup

  1. 准备需要解析的网页数据(实际是用requests或者selenium获取)

data = open('text1.html', encoding='utf-8').read()

  1. 创建BeautifulSoup对象(可以自动纠正数据中错误的html结构)

soup = BeautifulSoup(data, 'lxml')
# print(soup)

  1. 通过BeautifulSoup对象获取标签和标签内容

  • 获取标签
    • BeautifulSoup对象.select(css选择器) - 获取css选择器中所有的标签,返回列表,元素是选中的标签对象
    • BeautifulSoup对象.select_one(css选择器) - 获取css选择器中的第一个标签,返回标签对象
    • 标签对象.select/select_one(css选择器) - 在标签对象中获取css选择器选中的标签

result = soup.select('p')
print(result) # [

我是段落1

,

我是段落2

]result = soup.select_one('p')
print(result) #

我是段落1

result = soup.select('#p1')
print(result) # [

我是段落1

]
result = soup.select_one('#p1')
print(result) #

我是段落1



  • 获取标签内容
    • 标签对象.string - 获取标签中的文字内容,只有标签内容是纯文字才有效,否则结果是None
    • 标签对象.get_text() - 标签内容中所有的文字信息
    • 标签对象.contents

# 标签对象.string
p2 = soup.select_one('div>p')
print(p2) #

我是段落2


print(p2.string) # 我是段落2s1 = soup.select_one('#s1')
print(s1) # 我是span1
print(s1.string) # None# 标签对象.get_text()
print(p2.get_text()) # 我是段落2
print(s1.get_text()) # 我是span1# 标签对象.contents
print(p2.contents) # ['我是段落2']
result = s1.contents
print(result) # ['我是', span1]
print(result[-1].get_text()) # span1

  • 获取标签属性

a1 = soup.select_one('div>a')
print(a1) # 我是超链接2
print(a1.attrs['href']) # https://www.baidu.comimg = soup.select_one('img') #
print(img) #
print(img.attrs['src']) # http://www.gaoimg.com/uploads/allimg/210801/1-210P1151401S1.jpg

豆瓣电影TOP250信息抓取

import csv
import requests
from bs4 import BeautifulSoup# 创建保存信息的csv文件
f = open('files/doubantop250.csv', 'a', encoding='utf-8', newline='')
writer = csv.writer(f)# 设置请求头信息
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67','COOKIE': '自己的COOKIE信息'
}# 对每页信息进行遍历获取
for x in range(0, 226, 25):url = f'https://movie.douban.com/top250?start={x}&filter='print(url)res = requests.get(url, headers=header)soup = BeautifulSoup(res.text, 'lxml')# 定位到保存电影信息的块中all_movie_li = soup.select('#content>div>div.article>ol>li')# 遍历每部电影的信息,取出所需要的信息tmp = []for movie_info in all_movie_li:mov_name = movie_info.select_one('.pic>a>img').attrs['alt']mov_star = movie_info.select_one('.rating_num').get_text()# 信息缺失项报错跳过try:mov_quote = movie_info.select_one('.inq').get_text()except AttributeError:mov_quote = Nonemov_rev = movie_info.select('.info>.bd>.star>span')[3].get_text()mov_img = movie_info.select_one('.pic>a>img').attrs['src']tmp.extend([mov_name, mov_star, mov_rev, mov_img, mov_quote])# 写入文件writer.writerow(tmp)tmp.clear()

# CSV结果样式
电影名,评分,评分人数,电影海报,短评
肖申克的救赎,9.7,2418141人评价,https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg,希望让人自由。
霸王别姬,9.6,1799374人评价,https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561716440.jpg,风华绝代。
阿甘正传,9.5,1819919人评价,https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2372307693.jpg,一部美国近现代史。

推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
author-avatar
处男是你_909
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有