环境python3.9版本及以上,开发工具pycharm
HTML基础语法
HTML(Hyper Text Markup Language)超文本标记语言,是我们编写网页的最基本也是最核心的一种语言,其语言规则是用不同的标签对网页上的内容进行标记,从而使网页显示出不同的展示效果。
展示一部分:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>我的主页</title> </head> <body bgcolor="#7fffd4"> <h1 align="center">Hyun</h1> <p>hahflanfijgnckeihs</p> <a href="https://www.cnblogs.com/Hyun79/">Hyun79的主页</a> <img src="D:\download\截屏\ironman.jpg"/> </body> </html> <!-- html基本语法 1.<标签名 属性=“值”>被标记的内容</标签名> 2.<标签名 属性=“值” /> -->
CSS基础语法
css全称层叠样式表(Cascading Style Sheets),主要用来定义页面内容展示效果的一门语言。总之,css负责页面美化工作,即美妆+滤镜,而HTML则是素颜,作为页面框架。
1.css语法规则
1).通过Style属性来编写样式
2).通过Style标签,然后使用选择器的样式来编写样式
3).在css文件中编写样式,通过link引入该文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--在当前文件夹下新建一个stylesheet样式表,可以用来抓取rel和rev的属性值,后缀为css--> <link rel="stylesheet" href="mycss.css"> <!--在头标签写好了span标签的内容,往后所有使用span便签的都会受此影响--> <style> span{ color: pink; } </style> </head> <body> <div style="width: 100px;height: 100px;border:1px solid red;">hello i am Hyun79</div> <span>79 love 1067</span> </body> </html>
2.css选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>title</title> <style> /*id选择器*/ #abc{ color: pink; } /*标签选择器*/ li{ border: 1px solid red; } /*类选择器*/ .jay{ color: green; } /*选择器分组*/ div,span{ background: hotpink; } /*后代选择器*/ /*ul li{ !*空格表示子子孙孙,所有后代*!*/ /* list-style: none;*/ /*}*/ /*子选择器*/ ul > li{ /*>表示儿子一层*/ list-style: none; } /*相邻选择器*/ h1 + h2{ color: red; } /*属性选择器*/ a[target='_blank']{ text-decoration: none; } </style> </head> <body> <ul> <li>周润发</li> <li id="abc">黎明</li> <li>周星驰</li> <li> <ol> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ol> </li> </ul> <ol> <li>手电筒</li> <li>电视剧</li> <li>黑板刷</li> </ol> <div class="jay">啦啦啦</div> <span class="jay">溜溜溜</span> <h1>woaimahuaten</h1> <h2>woailiming</h2> <h2>woyeailiming</h2> <a href="#" target="_blank">我是blank</a> <a href="#" target="_self">我是self</a> <a href="#">我是啥也没有</a> </body> </html>
下面是拖延了2天的bs4解析基础知识及案例:
bs4的基本使用:
# 安装bs4 # pip install bs4 from bs4 import BeautifulSoup html = ''' <ul> <li><a href="zhangwuji.com">张无忌</a></li> <li id="abc"><a href="zhouxingchi.com">周星驰</a></li> <li><a href="zhubajie.com">猪八戒</a></li> <li><a href="wuzetian.com">武则天</a></li> <a href="jinamoshiwang.com">金毛狮王</a> </ul> ''' # 1.初始化BeautifulSoup对象 page = BeautifulSoup(html, "html.parser") # page.find("标签名", attrs={"属性": "值"}) # 查找某个元素,只会找到一个·1结果 li = page.find("li", attrs={"id", "abc"}) a = li.find("a") print(a.text) # 拿文本 print(a.get("href")) # 拿属性,get("属性名") # page.find_all("标签名", attrs={"属性": "值"}) # 找到一堆结果 li_list = page.find_all('li') for li in li_list: a = li.find("a") text = a.text href = a.get("href") print(text, href)
案例1:
import requests from bs4 import BeautifulSoup url = "http://www.xinfadi.com.cn/getPriceData.html" resp = requests.get(url) # print(resp.text) # 初始化BS4对象 page = BeautifulSoup(resp.text, "html.parser") table = page.find("table", attrs={"class": "hq_table"}) trs = table.find_all("tr")[1:] # 此时拿到除了第一行外的所有tr for tr in trs: tds = tr.find_all("td") name = tds[0].text low = tds[1].text avg = tds[2].text hig = tds[3].text kind = tds[4].text dan = tds[5].text data = tds[6].text # print(name, low, avg, hig, kind, dan, data) with open('新发地菜市场.csv',"w") as f: f.write(f'{name},{low},{avg},{hig},{kind},{dan},{data}') f.close() resp.close() print("爬取成功")
案例2:
import requests from bs4 import BeautifulSoup """ 注意: 如果拿到的子页面URL开头是/,直接在前面拼接上域名即可 如果拿到的子页面URL开头不是/,此时需要找到主页面的URL,去掉最后一个/后面的所有内容,和当前获取到的URL进行拼接 还有一种是本案例,直接拼接好的,直接使用即可,第一种情况,请移步爬取电影天堂案例。 """ url = "http://www.deskcity.org/girls/" resp = requests.get(url) # print(resp.text) main_page = BeautifulSoup(resp.text, "html.parser") l1 = main_page.find_all("div", attrs={"class": "wb_ppic"}) # print(l1) for i in l1: child_url = i.a.get("href") child_resp = requests.get(child_url) #请求到子页面 # 子页面的bs对象 child_bs = BeautifulSoup(child_resp.text, "html.parser") div = child_bs.find("div", attrs={"class": "wb_showpic_main"}) img_src = div.find("img").get("src") # 拿到图片的下载路径 # print(img_src) # 下载图片 img_resp = requests.get(img_src) # print(img_resp.text) # 注意,图片不是文本,不能获取text的内容 with open("ll.jpg", mode="wb") as f: # 注意,此时写入到文件的是字节,所以必须是wb f.write(img_resp.content) # 把图片信息写入到文件中