一、安装package
在使用爬虫前,需要先安装三个包,requests、BeautifulSoup、selenium。
输入如下代码,若无报错,则说明安装成功。
import requests
from bs4 import BeautifulSoup
import selenium
二、Requests应用
了解了原理,接下来实际应用一下requests库叭~
import requests
url = "https://www.baidu.com"
r = requests.get(url)
print(r.status_code)
print(r.headers)
print(r.text)
如果运行上述代码时出现如下报错:👇
requests.exceptions.ProxyError: HTTPSConnectionPool(host='blog.csdn.net', port=443): Max retries exceeded with url: /m0_51339444/article/details/129049696 (Caused by ProxyError('Cannot connect to proxy.', OSError(0, 'Error')))
可能是因为:(1)网络资源过大,网络无法加载;(2)使用了科学上网,需要关闭。
运行后,其中,r.status_code的返回值是200,表示请求成功,但是如果返回值是400,则表示请求失败。另外,发现程序的r.text输出出现乱码,这是因为在headers内没有明确指出encoding方式,会将其默认成ISO-8859-1编码方式,导致乱码。但是,仔细观察r.text输出,meta中暗示了是“utf-8”编码:👇
因此,需要指定r.encoding = “utf-8”,然后再执行,输出无乱码。完整代码如下:
import requests
url = "https://www.baidu.com"
r = requests.get(url)
print(r.status_code)
print("===============================")
print(r.headers)
print("===============================")
print(r.text)
print("===============================")
print(r.encoding)
r.encoding = "utf-8"
print("===============================")
print(r.text)
三、URL管理器
class UrlManager():
"""
url管理器
"""
def __init__(self): # 初始化
self.new_urls = set() # 放待爬取过的url
self.old_urls = set() # 放已经爬取的url
# 增添新的url(下面两个函数)(实现添加以及判重)
def add_new_url(self, url):
if url is None or len(url) == 0: # 判定url是否合法
return
# 判断url是否在容器中, 在就return,不添加
if url in self.new_urls or url in self.old_urls:
return
self.new_urls.add(url) # 否则,就添加新的url在集合中
def add_new_urls(self, urls):
if urls is None or len(urls) == 0:
return
for url in urls:
self.add_new_url(url)
# 获取待爬取的url (记得更改url状态)
def get_url(self):
if self.has_new_url():
url = self.new_urls.pop()
self.old_urls.add(url)
return url
else:
return None
# 判断容器中有没有新的待爬取的url
def has_new_url(self):
return len(self.new_urls) > 0
if __name__ == "__main__":
url_manager = UrlManager()
url_manager.add_new_url("url1")
url_manager.add_new_urls(["url1", "url2"])
print(url_manager.new_urls, url_manager.old_urls)
print("================================")
new_url = url_manager.get_url()
print(url_manager.new_urls, url_manager.old_urls)
print("================================")
new_url = url_manager.get_url()
print(url_manager.new_urls, url_manager.old_urls)
print("================================")
print(url_manager.has_new_url())
四、HTML简介
为了方便我们更好的理解网站的构成,需要先了解一下HTML的基本原理。
<head>里面是网站上不可见的信息
<body>里面是网站上可见的信息