Python-爬虫序章

出了道re题,当了一早上客服,好在终于有人解出来了(未提示)。

打开知识星球发现学长发布了作业,让学python爬取东西。

突发奇想:我要当 python👴 , 我要爬🐍图!!!

要求

使用 requests + BeautifulSoup 两个库。编写脚本,抓取 百度主页 。

运行结果 打印 出百度主页的 “ 意见反馈 ” 四个 汉字。

🌟代码中不允许出现汉字。

🌟两个库都需要用到。

准备

!!!看仔细!!!

要爬取的东西就是箭头指向的那个,小小的——意见反馈。

img

首先分析一下问题;整体思路要清楚,即便没有学过爬虫但是依靠编程基础和思维,也可以想到步骤;

我的第一印象如下:

⭐️request 用来获取百度网页信息;

⭐️对获得的信息进行检索匹配;

⭐️输出

不过有一个很明显的问题,要求代码中不能出现中文,意思是不能直接进行字符串匹配然后输出;然后诞生了一下思路:

⭐️把中文转换成其他编码,绕过学长定的要求。(不建议)

比如 base64 啥的。

⭐️F12 查看网页源码,找到 意见反馈 这些按钮不同的地方,匹配输出;

操作

首先安装上面提到的两个库,其中 BeautifulSoup 提示安装失败,百度找了一圈发现整合到bs4

里面去了;

1
2
PYTHON
pip install bs4 #完美解决问题

引用就和其他的整合类一样,具体看下面代码;

img

所以要找到我们要爬取的信息,需要这样写:

1
2
PYTHON
find("div", class_ ="s-bottom-layer-content")

最初我发现 requests.get() 的返回值类型特殊,不能使用 find 查找。

img

所以暂时先用 urlopen 来读取网页信息。完成代码如下:

1
2
3
4
5
6
7
8
9
10
11
PYTHON
from bs4 import BeautifulSoup as bf
from urllib.request import urlopen

html = urlopen("http://www.baidu.com/")
info = bf(html.read(),'html.parser')
flag = info.find("div", class_ ="s-bottom-layer-content").contents[4].text
print(flag)
***
意见反馈
***

写到这里,算是验证了我的思路是对的,实际上已经不用往下继续了,但是脑子一热,不行,这不符合我想当 Python 👴 的气质。

img

继续干!

接下来就是解决的问题就是 request.get() 得到的数据怎么进行处理了。

艹了,《hui气》;

👴一直以为是get得到的数据类型不支持 BeautifulSoup 结果是因为这句话出现的问题:

info = bf(html.read(),‘html.parser’) #就是上面 urlopen 的代码

意思是 urlopen 不支持 BeautifulSoup 需要转换,而 request.get() 压根不用转换,直接导入就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PYTHON
import requests
from bs4 import BeautifulSoup as bf
#设置浏览器头
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.116 Safari/537.36'
}
#获取html信息
url= "https://baidu.com/"
html = requests.get(url=url,headers=headers)
#导入 BeautifulSoup 数据处理
info = bf(html.text,'html.parser')
flag = info.find("div", class_ ="s-bottom-layer-content").contents[4].text
print(flag)
***
意见反馈
***

[img](http://image.shangu127.top/image/image/ctf/屏幕截图 2021-05-31 200821.png)

爬虫真好玩!

学会了两个包的使用,真好!

嘉宾和赞助

本篇文章由两位特邀大佬帮助下完成。

🌸dota_st

🌸mumuzi

正在添加评论系统,欢迎孤立我。进度:0/100;