python:网络爬虫之初运行

 

首先安装第三方包:Beautifulsoup

pip  install  beautifulsoup4

最好是使用虚拟环境运行代码,方便管理,也不会出现第三方包之间的版本冲突,省去一些小麻烦

 

此次是基于python标准库之urlib库运行的,当然后面肯定是会使用requests库运行的,毕竟优秀的东西大家都喜欢......

 

爬取豆瓣网站:

import urllib.request
from bs4 import BeautifulSoup
url = "https://movie.douban.com/chart"
response = urllib.request.urlopen(url)
html = response.read().decode('utf8')
bs = BeautifulSoup(html, "html.parser")
print(bs.body)

上述代码看似没有问题,但是在运行的时候报错如下:

urllib.error.URLError: 

从报错上看,是ssl证书导致的报错;查阅资料后,大家的解决都是把全局的ssl紧掉......

 

增加代码后如下显示:

import ssl
import urllib.request
from bs4 import BeautifulSoup
url = "https://movie.douban.com/chart"
ssl._create_default_https_context = ssl._create_unverified_context
response = urllib.request.urlopen(url)
html = response.read().decode('utf8')
bs = BeautifulSoup(html, "html.parser")
print(bs.body)
  • 导入ssl库
  • 取消全局证书的验证
  • ssl._create_default_https_context = ssl._create_unverified_context是取消全局证书的验证
  • 把私有函数_create_unverified_context赋值给_create_default_https_context,算是强制取消,又是私有函数调用,个人觉得是听不舒服的,但目前这个urlib也没有好的解决方法,除非更换为requests库......

 

看似没问题的代码再次运行,又出现报错如下:

urllib.error.HTTPError: HTTP Error 418:

这个问题查阅了资料,是因为网站做了反爬机制导致的,设置一个user-agent即可...

 

然后发现urlopen没有传headers头的入口

python:网络爬虫之初运行_第1张图片

 

然后就是增加请求方法,把headers头放入请求方法中,request返回对象传给urlopen

import ssl
import urllib.request
from bs4 import BeautifulSoup
url = "https://movie.douban.com/chart"
headers = {"user-agent":
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
           }
ssl._create_default_https_context = ssl._create_unverified_context
url_obj = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(url_obj)
html = response.read().decode('utf8')
bs = BeautifulSoup(html, "html.parser")
print(bs.body)
  • html.parser是python3中的一个解析器,还有lxml和html5lib解析器;lxml要pip进行安装
  • bs.body是获取html的body中的数据,还可以bs.html、bs.h1、bs.title等...

运行后的部分结果如下展示:

分类排行榜 · · · · · ·

一周口碑榜· · · · · · 5月7日 更新

你可能感兴趣的:(python网络爬虫,python,爬虫)