import requests #需要自己装
from bs4 import BeautifulSoup
response = requests.get("https://www.autohome.com.cn/news/") #get请求
#ptint(response.text) #可以查看相应体
response.encoding = 'gbk' #拿到的相应体中文出现乱码,因为汽车之家用的gbk
soup = BeautifulSoup(response.text,'html.parser')#html.parse是python内置的解析器,见过html字符串解析成bs4对象
div = soup.find(name='div',attrs={'id':'auto-channel-lazyload-article'}) #找div标签,id就是chrome检查网页找到的需要爬取网页的html文件表示的地址
li_list = div.find_all(name='li') #find 找的是与之相匹配的第一个标签,这个语句的作用是找到第一个li下边的所有标签
for li in li_list:
title = li.find(name='h3') #h3是标题标签找到所有新闻的标题
if not title:
continue #因为有的没有title 在此网页为广告位
p = li.find(name='p') #p标签为简介,拿取简介
a = li.find(name='a') #爬取超链接
print(title.text) #拿到了标题的文本格式
print(a.attrs.get('href')) #attrs爬取所有属性,href为此网页超链接的标签,拿到的是一个字典
print(p.text)
img = li.find(name='img')
src = img.get('src') #.get内置attrs 默认爬取所有图片
src = "https:" + src
print(src)
#再发起请求,下载图片
file_name = src.rsplit('/',maxsplit=1)[1] #写入文件名https://www3.autoimg.cn/newsdfs/g3/M04/73/E1/120x90_0_autohomecar__ChsEkVw39-SAUpGuAAIbTBZYnvA788.jpg maxsplit对文件名进行分割
ret = requests.get(src) #再次发起request请求,地址为src
with open(file_name,'wb') as f:
f.write(ret.content) #.content是下载返回的二进制数据
python中的split、rsplit和splitlines
仅作为本人笔记,非原创