day20总结
-
图片下载
import requests def download_img(url: str): # 1.对图片地址发送请求 response = requests.get(url) # 2.获取图片数据 data = response.content # 3.将数据写入图片文件中 with open('../files/img/zhiying.jpg', 'wb') as f: f.write(data) if __name__ =='__main__': download_img('https://i03piccdn.sogoucdn.com/9d5ee8cbc564ffbb')
-
图片批量下载
def download_image(url: str): response = requests.get(url) with open(f'files/{uuid1()}.jpeg', 'wb') as f: f.write(response.content) # 1. 获取整个页面的数据 response = requests.get('https://cd.zu.ke.com/zufang') content = response.text # print(content) # 2. 解析数据获取所有房屋的图片地址 all_images = findall(r'(?s)<a\s+class="content__list--item--aside".+?>\s+<img.+?data-src="(.+?)"', content) # 3. 下载所有图片 for x in all_images: download_image(x)
-
浏览器伪装
import requests # 浏览器伪装 headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 Core/1.77.119.400 QQBrowser/10.9.4817.400' } response = requests.get('https://movie.douban.com/top250',headers=headers) print(response)
-
bs4数据解析
-
bs4的作用
- 专门用来解析网页数据的第三方库(基于CSS选择器解析网页数据);
- 注意:下载的时候用beautifulsuop4;使用的时候用bs4
-
语法结构:
# 导入解析包 from bs4 import BeautifulSoup # bs4的用法 # 1)获取网页源代码 html = open('../files/网页源代码.html',encoding='utf-8').read() # 基于网页源代码创建BeautifulSoup对象 # soup对象代表网页对应的html标签(代表整个网页) soup = BeautifulSoup(html,'lxml') # 获取标签 # soup.select(css选择器) - 获取css选择器选中的所有标签,返回值是一个列表,列表中的元素是标签对象 # soup.select_one(CSS选择器) - 获取CSS选择器选中的第一个标签,返回值是标签对象 # 标签对象.select(css选择器) - 在指定标签中获取CSS选择器选中的所有标签标签,返回值是一个列表,列表中的元素是标签对象 # 标签对象.select_one(css选择器) - 获取CSS选择器选中的第一个标签,返回值是标签对象 box2 = soup.select('#box2') result = box2.select('p') ''' 获取标签内容和属性 ''' p = soup.select_one('p') img = soup.select_one('img') # 获取标签内容:标签对象.text # 获取标签属性值 : 标签对象.attrs[属性名]
-
-
豆瓣电影练习(单页)
import requests from bs4 import BeautifulSoup import csv # 1. 获取网页数据 def get_net_data(url: str): headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) return response.text # 2. 网页数据解析 def analysis_data(html: str): # 解析数据 soup = BeautifulSoup(html, 'lxml') all_film_div = soup.select('.grid_view>li>.item') all_data = [] for div in all_film_div: name = div.select_one('.title').text info = div.select_one('.bd>p').text.strip().split('\n')[-1].strip() time, country, category = info.split('/') score = div.select_one('.rating_num').text comment_count = div.select('.star>span')[-1].text[:-3] intro = div.select_one('.inq').text all_data.append([name, score, time.strip(), country.strip(), category.strip(), comment_count, intro]) # 保存数据 f = open('files/第一页电影数据.csv', 'w', encoding='utf-8', newline='') writer = csv.writer(f) writer.writerow(['电影名', '评分', '上映时间', '国家', '类型', '评论数', '简介']) writer.writerows(all_data) if __name__ == '__main__': result = get_net_data('https://movie.douban.com/top250') analysis_data(result)