Day022 - requests与bs4
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)<img src="(\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
- 准备需要解析的网页数据(实际是用requests或者selenium获取)
data = open('text1.html', encoding='utf-8').read()
- 创建BeautifulSoup对象(可以自动纠正数据中错误的html结构)
soup = BeautifulSoup(data, 'lxml')
# print(soup)
- 通过BeautifulSoup对象获取标签和标签内容
- 获取标签
- BeautifulSoup对象.select(css选择器) - 获取css选择器中所有的标签,返回列表,元素是选中的标签对象
- BeautifulSoup对象.select_one(css选择器) - 获取css选择器中的第一个标签,返回标签对象
- 标签对象.select/select_one(css选择器) - 在标签对象中获取css选择器选中的标签
result = soup.select('p')
print(result) # [<p id="p1">我是段落1</p>, <p id="p2">我是段落2</p>]result = soup.select_one('p')
print(result) # <p id="p1">我是段落1</p>result = soup.select('#p1')
print(result) # [<p id="p1">我是段落1</p>]result = soup.select_one('#p1')
print(result) # <p id="p1">我是段落1</p>
- 获取标签内容
- 标签对象.string - 获取标签中的文字内容,只有标签内容是纯文字才有效,否则结果是None
- 标签对象.get_text() - 标签内容中所有的文字信息
- 标签对象.contents
# 标签对象.string
p2 = soup.select_one('div>p')
print(p2) # <p id="p2">我是段落2</p>
print(p2.string) # 我是段落2s1 = soup.select_one('#s1')
print(s1) # <span id="s1"><b>我是span1</b></span>
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) # ['我是', <b>span1</b>]
print(result[-1].get_text()) # span1
- 获取标签属性
a1 = soup.select_one('div>a')
print(a1) # <a href="https://www.baidu.com">我是超链接2</a>
print(a1.attrs['href']) # https://www.baidu.comimg = soup.select_one('img') # <img alt="" src="http://www.gaoimg.com/uploads/allimg/210801/1-210P1151401S1.jpg"/>
print(img) # <img alt="" src="http://www.gaoimg.com/uploads/allimg/210801/1-210P1151401S1.jpg"/>
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,一部美国近现代史。
Day022 - requests与bs4相关推荐
- python爬虫requests和bs4引入
python爬虫requests和bs4引入 python:网络爬虫:利用优秀的第三方库,如requests,beautifulsoup 1.前提基础: Python3安装&Python3环境 ...
- python 安装模块requests、bs4、html5lib、 lxml、matplotlib
前言:最近学习python,想尝试下实现抓取网页的文本,并实现词频统计的功能.实现该功能需要安装的模块,分别是 requests.bs4.html5lib.lxml.matplotlib 背景:已经 ...
- Python spider (二) Requests Lxml bs4
1.安装Requests && Lxml && bs4 pip install requests pip install bs4 pip install lxml 2. ...
- day19 学习python爬虫——requests和bs4
day19 学习python爬虫--requests和bs4 一.requests使用详解 import requests 1.发送请求 requests.get(请求地址) - 直接获取请求地址对应 ...
- Python网络爬虫requests、bs4爬取空姐图片,福利哦
Scrapy框架很好,也提供了很多扩展点,可以自己编写中间件处理Scrapy的Request和Response.但是可定制化或者可掌控性来说,还是自己写的爬虫更加强一些. 接下来,我们来看一下使用Py ...
- 网络爬虫requests和bs4简单入门
网络爬虫基础(嵩天老师爬虫教学) 本博客的主要内容:介绍如何使用基本的库完成对html页面内容的爬取和分析,分以下几方面介绍 介绍网络爬虫的基本工作过程 requests库的基本用法 使用Beauti ...
- 爬虫系统基础框架 何时使用爬虫框架? requests库 + bs4来实现简单爬虫
转载请注明出处https://www.cnblogs.com/alexlee666/p/10180519.html,谢谢! 文中图片来自于我的简书博客. 一. 爬虫用途和本质: 网络爬虫顾名思义即模仿 ...
- 利用requests+re+bs4 爬取微星官网部分产品信息(主要是一些笔记本,少量台式机)
和朋友交流爬虫的时候看到这个网站,朋友说让我试试,昨天乘着心情好,就爬了一下. 我首先分心了一下这个网站,这个网站很有意思,由于自己的能力问题和爱好,没有对权证进行爬取,只是提取了部分商品的信息. 我 ...
- requests与bs4编码
在使用requests库时,response对象的.text属性 r.text 默认的response对象的encoding属性是None,所以在调用r.text解码的时候,request会猜它的编码 ...
最新文章
- python爬取慕课视频-python爬虫:爬取网站视频
- android textview 常用属性id,Android TextView常用属性
- bash的环境配置文件
- 全球服务器系统市场份额,IDC发布2017年第一季度全球融合系统报告 超融合市场最火爆...
- mininet在哪编写python脚本_1 mininet 简介及同时支持python2和python3
- vs2012 使用mysql_vs2012连接mysql
- java生成json字符串的方法
- config设置源 使用pip_conda和pip重新配置源
- codeblock无法新建工程_【工程前沿】专业专注凸显市政“制造” ——八公司太原南站东广场配套路网工程施工纪实...
- 中国省市区三级联动带下拉美化带数据库
- C# 机房重构——VS2017中没有报表控件(ReportView)
- Crosses and Crosses
- C语言:简单的switch()函数,代码讲解
- 【HTML/CSS】HTML/CSS个人学习总结
- c语言作业参考文献,c语言外文参考文献_数学类的文献 外文翻译_c 语言与面向对象的设计 习题及参考解答...
- ajax重要且常用参数
- 晋中学院 计算机系在哪个校区,晋中学院有几个校区及校区地址
- 由于老是重装系统,今天记录一下重装系统后大学生要安装的软件
- Mopria为Windows 10更新提供IPP打印解决方案
- 小程序标准有结论了,W3C发布小程序技术标准白皮书