网络爬虫是一个好用的工具,但他也是一把双刃剑,如果使用的好就可以使我们获取信息更加便利,但如果使用方法不当,可能会走上违法的道路。所以我们应该用合理使用网络爬虫。
用Python开发网络爬虫会十分简单,因为它有丰富的第三方库,而我们这此最需要的库就是requests和bs4,所以我们首先需要安装这两个第三方库。
在Python环境 anaconda中输入 pip install requests 和 pip install bs4,如果显示出现有succseefully,就说明安装成功,如果出现有 already satisfied,说明之前已经完成安装。
这次网络爬虫比较简单。我们在豆瓣网爬取了top250的电影,并把它输出了出来。
直接放代码,可以复制粘贴运行试试玩玩。
import requests
from bs4 import BeautifulSoup
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
for i in range(0,250,25):
print(i)
response=requests.get(f"https://www.douban.com/doulist/3936288/?start={i}&sort=time&playable=0&sub_type=",headers=head)
html = response.text
soup = BeautifulSoup(html,"html.parser")
all_title=soup.findAll("div",attrs={"class":"title"})
for title in all_title:
for i in title.text:
if '\u4e00' <= i <= '\u9fff':
print(i,end="")
print("\n")
我们一行一行来解释这个代码,这之中会有很多延伸。
import requests
from bs4 import BeautifulSoup
上面这两行就是Python导入包的方法。用import导入。
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
这一行代码是让我们的爬虫伪装成一个浏览器来对网页进行访问,而不是代码。有些网站会防止爬虫来大量访问,所以我们需要把爬虫变成一个浏览器,告诉网站我们是在用一个披着浏览器的爬虫来访问。
下面不是改变User-Agent的例子,我们访问B站试试。
可以看到输出的栏输出了412。412是HTTP状态码之一。下面就是HTTP状态码的返回值所代表的意义。
那接下来把代码伪装成浏览器,这样返回值就为200,成功访问到了网页。
可以点开一个网页,右键之后点击检查,在Network中找到浏览器的User-Agent。
回到我们的代码。
for i in range(0,250,25):
print(i)
response=requests.get(f"https://www.douban.com/doulist/3936288/?start={i}&sort=time&playable=0&sub_type=",headers=head)
html = response.text
上面首先来了个for循环,因为这250个电影并不是在一个页面上,而是在不同的页面上,但是网页的链接中我们发现只有start变了,为0,25,50,75,100,125,150,175,200,225。所以我们用一个for循环来分别爬取每一个页面的电影名称。
首先运用requests中的get方法访问网页,存入到response中,再用text方法获取网页中的源码,存入html中。
soup = BeautifulSoup(html,"html.parser")
all_title=soup.findAll("div",attrs={"class":"title"})
for title in all_title:
for i in title.text:
if '\u4e00' <= i <= '\u9fff':
print(i,end="")
print("\n")
接下来用bs4中的BeautifulSoup函数获取我们需要的信息。它所需要的第一个参数是获取内容的地方,上面我们把网页的源代码存入到html中,那么这里就从html中获取信息,第二个参数是告诉它,我们的解析格式为html格式。
all_title=soup.findAll("div",attrs={"class":"title"})
要明白上面这行代码,我们需要了解网页原代码的格式。
这里可以观看B站中一个up主的视频(【07-理论课】HTML有哪些常见标签?_哔哩哔哩_bilibili)
只要5分钟就可以明白大概的网页的源代码的格式。
我们观察网页源代码,可以看到这个电影的名字被<div class="title"> </div>给包围住,所以我们只需要查找<div class="title">的中内容就可以爬取出电影的名称。所以就有了上面那行代码。上面的代码把网页中符合要求的源代码都存储在了all_title中。
那我们再来个for循环,分别读取每一篇电影的名字。再对读取出来的内容进行判断,让其只输出中文,这样一个简单的网络爬虫就完成了。
for title in all_title:
for i in title.text:
if '\u4e00' <= i <= '\u9fff':
print(i,end="")
print("\n")
运行效果:
博主也是刚接触爬虫,也是跟着上面链接中的up学习的,如果有什么不了解也可以看她的视频进行更加细致的学习。