自学Python爬虫笔记(day5)

发布时间 2023-04-11 21:04:31作者: Peom`

环境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)       # 把图片信息写入到文件中