首页 >> 大全

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

2023-09-16 大全 33 作者:考证青年

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

作  者:陈大大陈

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

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

目录

获取豆瓣网页源码

怎么伪装成浏览器请求

怎么打印标题

最终代码

后记

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

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

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

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

获取豆瓣网页源码

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

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

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

结果如下。

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

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

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

怎么伪装成浏览器请求

首先随便打开一个网页。

右键点击检查。

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

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

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

复制它之后的内容。

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

将代码升级为下面这样。

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(.text)

打印成功。

怎么打印标题

第二步就是从bs4中导入库

from bs4

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

html=.text

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

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

使用一个变量储存它。

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

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

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

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

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

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

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

print()

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

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

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

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

可我们想要的是。

继续找规律。

这是第一页的网址。

这是第二页的地址。

我们发现第一页和第二页的区别只在于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.textsoup=BeautifulSoup(html,"html.parser")all_titles=soup.findAll("span",attrs={"class":"title"})for title in all_titles:title_string=title.stringif '/' not in title_string:print(title_string)

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

后记

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

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了