爬取豆瓣電影TOP250

# 利用css選擇器對(duì)電影的信息進(jìn)行爬取
import requests
import parsel
import csv
import time
import re


class CssSpider:

    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
        }

    def get_dp(self, url):
        response = requests.get(url, headers=self.headers)
        return response.text

    def parsel_dp(self, response):
        data = []
        selector = parsel.Selector(response)
        li = selector.css('ol.grid_view li')
        for dd in li:
            data.append(dd.css('span.title::text').get())
            data.append(dd.css('img::attr(src)').get())
            data.append(dd.css('span.rating_num::text').get())
            # data.append(str(dd.css('div span:nth-child(4)').get()))
            data.append(re.sub('<span>|</span>', '', str(dd.css('div span:nth-child(4)').get())))
            data.append(re.sub('<span class="inq">|</span>', "", str(dd.css('span.inq').get())))

            # for k, v in dic.items():
            #     ls.append('{}:{}'.format(k, v))
            #
            data_str_done = str(data)
            data_str_done_new = re.sub("\[|\]|\'", "", data_str_done)
            print(data)
            data = []
            with open('豆瓣Top250css.csv', 'a', encoding='UTF-8', newline='') as fp:
                fp.write(data_str_done_new + '\n')

    def wirte_head(self):
        with open('豆瓣Top250css.csv', mode='w', encoding='utf-8', newline='') as fp:
            fp.write("電影名,圖片連接,電影評(píng)分,評(píng)價(jià)人數(shù),內(nèi)容簡介" + '\n')

    def main(self, page):
        self.wirte_head()
        for i in range(0, int(page*25), 25):
            url = f'https://movie.douban.com/top250?start={i}&filter='
            res = self.get_dp(url)
            time.sleep(3)
            self.parsel_dp(res)
            print(f'正在爬取{i / 25}頁')


if __name__ == '__main__':
    spider = CssSpider()
    page = input("請(qǐng)輸入你想爬多少頁:")
    spider.main(page)

1. CSS選擇器

在 CSS 中,選擇器是一種模式,用于選擇需要添加樣式的元素。

"CSS" 列指示該屬性是在哪個(gè) CSS 版本中定義的。(CSS1、CSS2 還是 CSS3。)

w3c指南:https://www.w3school.com.cn/cssref/css_selectors.ASP

選擇器 例子 例子描述
.class .intro 選擇 class="intro" 的所有元素。
#id #firstname 選擇 id="firstname" 的所有元素。
* * 選擇所有元素。
element p 選擇所有 <p> 元素。
element,element div,p 選擇所有 <div> 元素和所有 <p> 元素。
element element div p 選擇 <div> 元素內(nèi)部的所有 <p> 元素。
element>element div>p 選擇父元素為 <div> 元素的所有 <p> 元素。
[attribute] [target] 選擇帶有 target 屬性所有元素。
[attribute=value] [target=_blank] 選擇 target="_blank" 的所有元素。

1.1 標(biāo)簽選擇器

標(biāo)簽選擇器其實(shí)就是我們經(jīng)常說的html代碼中的標(biāo)簽。例如html、span、p、div、a、img等等;比如我們想要設(shè)置網(wǎng)頁中的p標(biāo)簽內(nèi)一段文字的字體和顏色,那么css代碼就如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>標(biāo)簽選擇器</title>
</head>
<style>
    p{
        color: #f00;
        font-size: 16px;
    }
</style>
<body>
<p>css標(biāo)簽選擇器的介紹</p>
<p>標(biāo)簽選擇器、類選擇器、ID選擇器</p>
<a >百度一下</a>
</body>
</html>

1.2 類選擇器

類選擇器在我們今后的css樣式編碼中是最常用到的,它是通過為元素設(shè)置單獨(dú)的class來賦予元素樣式效果。

使用語法:(我們這里為p標(biāo)簽單獨(dú)設(shè)置一個(gè)類選擇器.content,代碼就如下所示)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>類選擇器</title>
</head>
<style>
    .content{
        color: #f00;
        font-size: 16px;
    }
</style>
<body>
<p>css標(biāo)簽選擇器的介紹</p>
<p class="content">標(biāo)簽選擇器、類選擇器、ID選擇器</p>
</body>
</html>

詳細(xì)講解:

1、類選擇器都是使用英文圓點(diǎn)(.)開頭;

2、每個(gè)元素可以有多個(gè)類名,,名稱可以任意起名(但不要起中文,一般都是與內(nèi)容相關(guān)的英文縮寫)

3、類選擇器只會(huì)改變類下的元素樣式,而不會(huì)改變其它標(biāo)簽的默認(rèn)樣式;

我們上邊的頁面在瀏覽器上顯示的效果就如下所示:(content下的文字內(nèi)容顏色變成了紅色,字體變成了16px)

1.3 ID選擇器

ID選擇器類似于類選擇符,作用同類選擇符相同,但也有一些重要的區(qū)別。

使用語法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ID擇器</title>
</head>
<style>
    #content{
        color: #f00;
        font-size: 16px;
    }
</style>
<body>
<p>css標(biāo)簽選擇器的介紹</p>
<p id="content">標(biāo)簽選擇器、類選擇器、ID選擇器</p>
</body>
</html>

詳細(xì)講解:

1、ID選擇器為標(biāo)簽設(shè)置id="ID名稱",而不是class="類名稱"。

2、ID選擇符的前面是符號(hào)為井號(hào)(#),而不是英文圓點(diǎn)(.)。

3、ID選擇器的名稱是唯一的,即相同名稱的id選擇器在一個(gè)頁面只能出現(xiàn)一次;

1.4 組合選擇器

可以多個(gè)選擇器一起使用,就是組合選擇器

1.5 偽類選擇器

可以用 :: 指定選擇標(biāo)簽的屬性。

:last-child p:last-child 選擇所有p元素的最后一個(gè)子元素
:last-of-type p:last-of-type 選擇每個(gè)p元素是其母元素的最后一個(gè)p元素
:not(selector) :not(p) 選擇所有p以外的元素
:nth-child(n) p:nth-child(2) 選擇所有 p 元素的父元素的第二個(gè)子元素
:nth-last-child(n) p:nth-last-child(2) 選擇所有p元素倒數(shù)的第二個(gè)子元素

以上為css選擇器得部分用法,詳細(xì)用法見[https://www.w3school.com.cn/cssref/css_selectors.ASP]
原文鏈接:https://blog.csdn.net/weixin_44984627/article/details/104765677

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容