爬取豆瓣电影TOP250

# 利用css选择器对电影的信息进行爬取
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("电影名,图片连接,电影评分,评价人数,内容简介" + '\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("请输入你想爬多少页:")
    spider.main(page)

1. CSS选择器

在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。

“CSS” 列指示该属性是在哪个 CSS 版本中定义的。(CSS1、CSS2 还是 CSS3。)

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

选择器例子例子描述
.class.intro选择 class=“intro” 的所有元素。
#id#firstname选择 id=“firstname” 的所有元素。
**选择所有元素。
elementp选择所有

元素。

element,elementdiv,p选择所有
元素和所有

元素。

element elementdiv p选择
元素内部的所有

元素。

element>elementdiv>p选择父元素为
元素的所有

元素。

[attribute][target]选择带有 target 属性所有元素。
[attribute=value][target=_blank]选择 target="_blank" 的所有元素。

1.1 标签选择器

标签选择器其实就是我们经常说的html代码中的标签。例如html、span、p、div、a、img等等;比如我们想要设置网页中的p标签内一段文字的字体和颜色,那么css代码就如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标签选择器</title>
</head>
<style>
    p{
        color: #f00;
        font-size: 16px;
    }
</style>
<body>
<p>css标签选择器的介绍</p>
<p>标签选择器、类选择器、ID选择器</p>
<a href="https://www.baidu.com">百度一下</a>
</body>
</html>

1.2 类选择器

类选择器在我们今后的css样式编码中是最常用到的,它是通过为元素设置单独的class来赋予元素样式效果。

使用语法:(我们这里为p标签单独设置一个类选择器.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标签选择器的介绍</p>
<p class="content">标签选择器、类选择器、ID选择器</p>
</body>
</html>

详细讲解:

1、类选择器都是使用英文圆点(.)开头;

2、每个元素可以有多个类名,,名称可以任意起名(但不要起中文,一般都是与内容相关的英文缩写)

3、类选择器只会改变类下的元素样式,而不会改变其它标签的默认样式;

我们上边的页面在浏览器上显示的效果就如下所示:(content下的文字内容颜色变成了红色,字体变成了16px)

1.3 ID选择器

ID选择器类似于类选择符,作用同类选择符相同,但也有一些重要的区别。

使用语法:

<!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标签选择器的介绍</p>
<p id="content">标签选择器、类选择器、ID选择器</p>
</body>
</html>

详细讲解:

1、ID选择器为标签设置id=“ID名称”,而不是class=“类名称”。

2、ID选择符的前面是符号为井号(#),而不是英文圆点(.)。

3、ID选择器的名称是唯一的,即相同名称的id选择器在一个页面只能出现一次;

1.4 组合选择器

可以多个选择器一起使用,就是组合选择器

1.5 伪类选择器

可以用 :: 指定选择标签的属性。

:last-childp:last-child选择所有p元素的最后一个子元素
:last-of-typep:last-of-type选择每个p元素是其母元素的最后一个p元素
:not(selector):not§选择所有p以外的元素
:nth-child(n)p:nth-child(2)选择所有 p 元素的父元素的第二个子元素
:nth-last-child(n)p:nth-last-child(2)选择所有p元素倒数的第二个子元素

以上为css选择器得部分用法,详细用法见[https://www.w3school.com.cn/cssref/css_selectors.ASP]
Github项目地址:https://github.com/Key-lei/doubanSpider

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值