首先安装第三方包: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)
看似没问题的代码再次运行,又出现报错如下:
urllib.error.HTTPError: HTTP Error 418:
这个问题查阅了资料,是因为网站做了反爬机制导致的,设置一个user-agent即可...
然后发现urlopen没有传headers头的入口
然后就是增加请求方法,把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)
运行后的部分结果如下展示:
分类排行榜 · · · · · ·
以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!
未完,待续…
一直都在努力,希望您也是
微信搜索公众号:就用python