import requests
from bs4 import BeautifulSoup
response = requests.get("https://www.autohome.com.cn/news/") # 01 发送请求
response.encoding = response.apparent_encoding # 格式转换防止页面中文乱码 自动获得返回数据原来的编码
# print(response.text) # 打印整个html文本 soup = BeautifulSoup(response.text,features="html.parser") # 02 soup :整体的框架 把html文本转换成soup对象,features="表示引擎"
target = soup.find(id="auto-channel-lazyload-article") # 03 soup==>>div :在soup框架种找里面的文本内容先找做大的哪个div 标签 从id =" " 的标签开始
# print(target) # 只打印div标签内容 li_list=target.find_all("li") # find表示只找第一个li的标签,find_all表示找所有的
# print(li_list) #打印所有的div里面的li标签,打印的是列表类型,不是 beautifulsuop 的对象 for i in li_list: a = i.find("a") # 04 找soup==>>div==>>li_list :不是 beautifulsuop 的对象,是一个列表。但li_list[0]是,可以用for循环来查找
if a: # 因为有些li标签没有a 所有用个if判断语句有a的话在执行下面的
print('http:'+a.attrs.get('href')) # 打印所有li中的a标签 (a.attrs )表示找到a标签的属性值,打印所有a标签的链接 h3_txt= a.find("h3") .text # 05 找soup==>>div==>>li_list==>>h3 :查找 li 标签里面的 h3 标签 .text 获取对象的文本,返回的是字符串格式
print(h3_txt) # 打印li 标签里面的 h3 标签的内容 # type查看属性type(h3_txt) img_url = a.find('img') .attrs.get('src') # 06 找soup==>>div==>>li_list==>>img :查找 li 里面的 img 标签 并获取标签属性值,既标签的链接
print('http:'+img_url) # 打印li 标签里面的 图片链接 的内容 '''
07 保存图片到本地
'''
import uuid
image_reponse = requests.get(url='http:'+img_url) file_name = str(uuid.uuid4()) + '.jpg' # 用uuid随机生成名字 with open(file_name, 'wb') as f:
f.write(image_reponse.content) # reponse.content返回字节 reponse.text 返回的是字符串 reponse.encoding reponse.reparent_encoding自动获得返回数据原来的编码