【爬虫篇】《极客Python之效率革命》(小甲鱼) b站笔记

〇、前情提要

如果有更新了请提醒我写笔记。
然后突然想起来我冲过小甲鱼的会员,那就跟着小甲鱼学一下吧,后续如果在b站看到了补充的还会再继续写笔记。
参考:

  1. 【爬虫篇】《极客Python之效率革命》(小甲鱼)
    https://www.bilibili.com/video/av23695737/?p=1
  2. [模块档案] Requests 模块帮助文档(小甲鱼版)
    https://fishc.com.cn/thread-95893-1-1.html
  3. [模块档案] BeautifulSoup4 帮助文档(小甲鱼版)【更新中】
    https://fishc.com.cn/thread-97807-1-1.html
  4. [模块档案] openpyxl 模块中文文档(一个读写 EXCEL 文件的模块)
    https://fishc.com.cn/forum.php?mod=viewthread&tid=101547&extra=page%3D1%26filter%3Dtypeid%26typeid%3D701
  5. [模块档案] Python3 如何优雅的使用正则表达式
    https://fishc.com.cn/thread-99281-1-1.html

------------第一课------------

  1. 爬取豆瓣 TOP250 电影排行榜
    https://fishc.com.cn/thread-94979-1-1.html
  2. 豆瓣电影 Top 250
    https://movie.douban.com/top250

------------第二课------------

  1. [爬虫] 2017年中国主要城市房价工资比排行榜
    https://fishc.com.cn/thread-104965-1-1.html
  2. 2017全国城市房价 工资排行榜出炉!
    https://news.house.qq.com/a/20170702/003985.htm

------------第三课------------

  1. [爬虫] 爬取网易云音乐的精彩评论
    https://fishc.com.cn/forum.php?mod=viewthread&tid=100435&extra=page%3D1%26filter%3Dtypeid%26typeid%3D711

------------第四、五课------------

  1. [爬虫] 统计淘宝某宝贝的销量
    https://fishc.com.cn/forum.php?mod=viewthread&tid=98908&extra=page%3D1%26filter%3Dtypeid%26typeid%3D711

------------第六课------------

  1. [爬虫] 找出B站最受欢迎的编程课程
    https://fishc.com.cn/thread-140044-1-1.html

P1、爬取豆瓣TOP250电影排行榜

Requests模块

[模块档案] Requests 模块帮助文档(小甲鱼版)
https://fishc.com.cn/thread-95893-1-1.html

使用时需要点击目录跳转到页面。
在这里插入图片描述
安装:
pip3 install requests
pipenv install requests(如果你的机子上还没有安装 pipenv请先安装 pipenv,pip3 install pipenv
在这里插入图片描述
在这里插入图片描述

BeautifulSoup4模块

[模块档案] BeautifulSoup4 帮助文档(小甲鱼版)【更新中】
https://fishc.com.cn/thread-97807-1-1.html
安装:
pip3 install beautifulsoup4
在这里插入图片描述

开发思路

在这里插入图片描述

演示

在这里插入图片描述
有反爬机制,要在代码前添加headers,或者在requests的时候加header(我用了这种)。

import requests
import bs4
# ①win
headers = {
   
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"}
res = requests.get("https://movie.douban.com/top250")

# ②mac
headers = {
   "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"}
res = requests.get("https://movie.douban.com/top250")

# ③模仿成浏览器
res=requests.get('https://movie.douban.com/top250',headers={
   'user-agent':'Mozilla/5.0'}) 

soup = bs4.BeautifulSoup(res.text, "html.parser")#指定的解析器
targets = soup.find_all("div", class_="hd")
for each in targets:
        print(each.a.span.text)

修改后成功爬到该页信息
在这里插入图片描述

我的笔记-【Python】mac反爬虫 豆瓣为例
https://blog.csdn.net/weixin_43210113/article/details/107508693

代码解释

targets = soup.find_all("div", class_="hd")

targets 为类为hd的div在这里插入图片描述
在这里插入图片描述
each.a.span.text
div.a.span第一个text的内容

爬取全部

第一页
https://movie.douban.com/top250?start=0&filter=
第二页
https://movie.douban.com/top250?start=25&filter=
->https://movie.douban.com/top250?start=25的倍数&filter=
host = “https://movie.douban.com/top250”
url = host + ‘/?start=’ + str(25 * i)

find_movies(res)方法里读取了电影名、评分、资料
result 里存返回值

最后保存到豆瓣TOP250电影.txt文件里
在这里插入图片描述

import requests
import bs4
import re

def open_url(url):
    # 使用代理
    # proxies = {"http": "127.0.0.1:1080", "https": "127.0.0.1:1080"}
    headers = {
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}

    # res = requests.get(url, headers=headers, proxies=proxies)
    res = requests.get(url, headers=headers)

    return res

def find_movies(res):
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
 
    # 电影名
    movies = []
    targets = soup.find_all("div", class_="hd")
    for each in targets:
        movies.append(each.a.span.text)

    # 评分
    ranks = []
    targets = soup.find_all("span", class_="rating_num")
    for each in targets:
        ranks.append(' 评分:%s ' % each.text)

    # 资料
    messages = []
    targets = soup.find_all("div", class_="bd")
    for each in targets:
        try:
            messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())
        except:
            continue

    result = []
    length = len(movies)
    for i in range(length):
        result.append(movies[i] + ranks[i] + messages[i] + '\n')

    return result

# 找出一共有多少个页面
def find_depth(res):
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text

    return int(depth)

def main():
    host = "https://movie.douban.com/top250"
    res = open_url(host)
    depth = find_depth(res)

    result = []
    for i in range(depth):
        url = host + '/?start=' + str(25 * i)
        res = open_url(url)
        result.extend(find_movies(res))

    with open("豆瓣TOP250电影.txt", "w", encoding="utf-8") as f:
        for each in result:
            f.write(each)
    
if __name__ == "__main__":
    main()

extend(result,item1,item2…..)
这里这个方法主要用来合并,将所有的参数项都合并result中,并返回result
soup.find('span', class_='next').previous_sib

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值