在很多人的印象中,爬虫都是灰常高大上的东西,实际上爬虫并不是遥不可及。只要了解了原理,爬虫也十分简单
这里爬虫用的语言为Python
一套爬虫的流程大致是这样(重点,做笔记):
(1)获取初始的URL,该URL网址是用户自己制定的初始爬取的网页
(2)爬取对应URL地址的网页时,获取新的URL地址
(3)将新的URL放入URL队列中
(4)从URL队列中读取新的URL,然后依据新的URL爬取网页,同时从新的网页中获取新的URL地址,重复上述的爬取过程
(5)设置停止条件,如果没有设置停止条件,爬虫会一直爬取下去,知道无法获取新的URL地址为止。设置了停止条件后,爬虫会在满足停止条件时停止爬取
这就是一个通用网络爬虫的基本工作原理,下面通过一个小实例来获得百度的原网址
注:在爬虫途中,会踩很多坑,这些是避免不了的,你只有亲自看着编译器的红色字体,删掉辛辛苦苦写的代码,才能获得经验
重点不在代码,在思路
首先导入Python自带的模块
import urllib.request
urllib库是python自带的爬虫模块,提供了一个uropen方法,用于发送请求至指定url
发送请求:
response = urllib.request.urlopen('https://www.baidu.com/')
我这里是向百度网发送请求,获取到的是一个response数据。
注:这里并不能获取到百度网的源代码,解决方法是把“http”后面的s去掉。
读取网页代码:
html = response.read()
读取代码,没什么好说的
输出
print(html)
现在来看看运行效果
b’\r\n\r\n\t\r\n\r\n\r\n\t\r\n\r\n’
如果想看百度网源代码,请看下面完整代码
#导入模块
import urllib.request
#发送网络请求
response = urllib.request.urlopen('http://www.baidu.com/')
#读取网页代码
html = response.read().decode()
#输出
print(html)
这样就获得了百度网的源代码
我们还可以对我们的网址进行改造,成品如下:
import urllib.request
url = input("输入你要爬取的网页\>")
if url[0:5] == 'https':
gets = url[5:]
real_url = 'http' + gets
try:
response = urllib.request.urlopen(real_url).read()
print(response.decode())
except:
print("出现错误")
else:
try:
html = urllib.request.urlopen(url).read()
print(html.decode())
except:
print("出现错误")
当然,如果这个网站要像headers之类的请求,那么就会失败
未经允许,禁止转载