# 利用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