【重生之我是蜘蛛侠】手把手教你用python爬虫,跟着做就好了

 

💯 博客内容:【LeetCode训练营】用栈来实现队列+用队列来实现栈 详解

😀 作  者:陈大大陈

🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

获取豆瓣网页源码 

怎么伪装成浏览器请求

怎么打印标题 

最终代码 

后记

首先要安装bs4这个第三方库。

打开pycharm的终端界面,输入pip install bs4即可安装。

我之前安装过,所以显示已安装。 

第三步是导入requests库,没有的话也要安装,步骤和上面的一样,命令变为pip install requests

获取豆瓣网页源码 

先获取网页源码,需要我们先导入requests库。

先试试直接获取,看能不能成功。

import requests
response=requests.get("https://movie.douban.com/top250")
print(response)
print(response.status_code)

结果如下。 

 打印出错误码,访问失败。

这是因为豆瓣网页识别出了我们的程序,而豆瓣网页只想服务于真正的用户。

那么我们接下来要做的就是将程序伪装成浏览器请求来伪装成用户。

怎么伪装成浏览器请求

 首先随便打开一个网页。

右键点击检查。

找到网络选项,点击跳转到下面的页面。

接着刷新页面,页面变成下面这样。

 随便点开一个,找到User-Agent选项。

复制它之后的内容。

我们创建一个叫headers的字典,它里面的键值对就是我们要传入的内容。

将代码升级为下面这样。 

import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42"
}
reponse=requests.get("https://movie.douban.com/top250",headers=headers)
print(reponse)
print(reponse.status_code)
print(reponse.text)

 运行。

没有报错,访问成功。接下来打印源码。

print(response.text)

 打印成功。

怎么打印标题 

第二步就是从bs4中导入BeautifulSoup库

from bs4 import BeautifulSoup

将响应体里面的内容用一个html变量储存。

html=response.text

接下来把html传入 BeautifulSoup的构造函数来获取想要的信息。

第二个参数传入html.parser,它的含义是html解析器,代表正在解析html内容。

使用一个变量储存它。

接下来我们需要知道所查找信息的特点。

打开豆瓣网页,右键检查,选择小箭头,鼠标靠近电影名称。

我们发现标题都是span元素,且class属性都是title。

这样我们就可以使用BeautifulSoup的findAll方法,第一个标签传入标签名span,第二个标签传入class值。 

all_titles=soup.findAll("span",attrs={"class":"title"})

findAll返回的是一个可迭代对象,我们来迭代一下它,打印出来如下所示。

我们不想要它的HTML标签,所以就只打印它的string属性。

   print(title_string)

这次打印出来如下所示,我们也不想要它的原版标题,该怎么删除呢?

一个简单的if判断就能搞定。

title_string=title.string
if '/' not in title_string:
print(title.string)

 

 这样,top25的电影就被我们打印出来了。

可我们想要的是top250。

继续找规律。

 这是第一页的网址。

这是第二页的地址。 

我们发现第一页和第二页的区别只在于start的值。

那我们就可以通过修改start的值加上for循环来达到目的。

最终代码 

from bs4 import BeautifulSoup
import requests
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42"}
for num in range(0,250,25):
    response=requests.get(f"https://movie.douban.com/top250?start={num}",headers=headers)
    # print(response)
    # print(response.status_code)
    html=response.text
    soup=BeautifulSoup(html,"html.parser")
    all_titles=soup.findAll("span",attrs={"class":"title"})
    for title in all_titles:
        title_string=title.string
        if '/' not in title_string:
            print(title_string)

爬虫虽好,不要贪杯哦,不然。。。 

后记

这篇文章是看这个视频做的笔记。【10-实战课】从源码获取豆瓣电影TOP250_哔哩哔哩_bilibili​​​​​​

这个up主讲的巨好,建议大家都看看。 

  • 58
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 50
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大大陈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值