小白学爬虫的笔记2024.02.09

学习目标:小白学爬虫的笔记

提示:这里可以添加学习目标

例如:

  • 一周掌握 Java 入门知识

学习内容:

数据科学年前大作业:豆瓣Top250电影爬取

目标:

  1. 电影名称
  2. 电影引言
  3. 导演姓名
  4. 主演
  5. 电影评分

requests模块:

pip3 install requests
#安装,因为requests库不是内置的

requests提供了一种简单而优雅的方式,用于发送各种HTTP请求。在爬虫中的应用非常广泛。

首先:

要找到需要爬虫爬取的网站:“https://movie.douban.com/top250?start=0&filter=”豆瓣
然后点击右键下的检索(检查),在Internet标签下找到该网页的请求头:
(这里用的是top250?start=0&filter=文件下的"User-Agent": “Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36”)

像User-Agent这样的一般就是可以用的请求头了

最底下的那个

然后:

使用requests函数的get方法向服务端发送请求

url = "https://movie.douban.com/top250?start=0&filter="#需要扒的网页的url
    headers = {#从网页Internet里翻出的请求头
   		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
    }                                                             
    response = requests.get(url=url, headers=headers)             #发送请求
    print(response.status_code)#输出返回的状态码

如果结果是418,那么就是被对方发现了,开了个古早愚人节给你,而如果结果是200,表示成功进了连接(也不一定,有可能别人在逗你玩,但豆瓣上应该是成功了。)

得到了返回值以后:

现在我们可以用BeautifulSoup对象开始对数据的解析了。
格式:project_name = BeautifulSoup(data.text,“parser”)

soup = BeautifulSoup(response.text, "html.parser")#html.parser是python自带的解析器 
movies = soup.find_all("div", class_="item")#使用find_all方法定位所有的电影项。    

其中顺带将电影定位出来(在豆瓣里电影都在div标签下的item类里)
在这里插入图片描述
find_all和find是一个好东西啊!!!
对于不同的网站具体分析了以后,可以用find方法找到我们要的数据了
如下图所示:
在这里插入图片描述
在多数的数据前会有标签(div、a、span···)和分类(info、hd···)
根据这些分类可以直接找到需要的内容:

    movies = soup.find_all("div", class_="item")
    # print(movies)
    for movie in movies:
        title = movie.find("span", class_="title").text            #标题
        rating = movie.find("span", class_="rating_num").text      #评分
        inq = movie.find("span", class_="inq").text                #引导
        docAndAct = movie.find("p", class_="").text                #导演和主演
        data.append([title] + [rating] + [docAndAct] + [inq])
    """    bd = (
            movie.find("div", class_="bd")                  # 让生成的文件可读性增加
            .text.replace(" ", "")                          # 用replace将空格和换行替换了
            .replace("\n\n\n", "")
            .replace("\n\n\n", "")
            .split("\n")
        )
        bd = [x for x in bd if x != ""]                     #将从bd提取的这个大字符串分离
        bd = [x for y in bd for x in y.split("   ", 1)]     #根据“”和“   ”进行元素的区分
        data.append(``````)
    """#注释代码来自CSDN 逸峰轻云

注意:要记得有地方存储代码运行的结果哦!!!
(这里是我提前设定了一个 data[ ]空列表)

最后:

我们把数据打包成文件就可以了!
有很多种方法,这里用 csv的文件转换:

with open(r"TOP250movies.csv", "w", newline="", encoding='utf-8-sig') as file:   #组装成文件
    writer = csv.writer(file)                                              
    writer.writerow(["电影名", "评分","导演和主演"," 电影引言"])
    writer.writerows(data)

在这里encoding转码格式可以是utf-8也可以是utf-8-sig,反正我试了试都可以正常显示中文【doge】

补充新知识:R原串

r原串是在写正则表达式的时侯将‘\\\\’的复杂写法改成‘\\’
还可以解决写正则时不符合utf-8规范的问题
写法:

  •   原:str = re.findall('a\\\\nbc','a\\bc')
    
  •   现:str = re.findall(r'a\\nbc','a\\bc')
    

解决print乱码问题:
有的时候在Windows系统里会由于编码格式问题而导致输出乱码:
只要加上:

import sys              #解决Windows系统下print的乱码问题
import io
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

就可以了~~~~

最后的最后:

放几张手写笔记(flag)
在这里插入图片描述
在这里插入图片描述


学习时间:

开始:2024.02.05~结束:2024.02.08

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值