疫情期间在家没事开始学python爬虫,本文记录我的第一个爬虫
一、爬百度首页
在这里我用了两种库来爬,一种是urllib.request,另一种是requests库,这里我推荐大家使用requests库,因为使用urllib爬取的百度首页代码和浏览器里看到的不太一样
接下来上代码
1.使用urllib
# 导入urllib库的urlopen的函数
from urllib.request import urlopen
# 发出请求,获取html
html = urlopen("https://www.baidu.com/")
# 获取的html内容是字节,将其转化成字符串
html_text = bytes.decode(html.read())
# 打印html的内容
print(html_text)
2.使用requests
import requests
head = {
"User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebLit/537.36(KHTML,like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
s = requests.get("http://www.baidu.com", headers=head)
print(s.text)
二、解析html
上一步我们已经获取了百度首页的html代码,接下来我们解析html获取百度的标题
我们先从浏览器看百度的源码找到百度的标题
从下图百度源码的截图中我们可以看到百度的标题在html下的<head>中的<title>里,就是图片中红框位置
学过html的同志们都知道html是一层层的嵌套的所以我们想找到“百度一下,你就知道”应该先找到“title”标签,而"title"标签在“head”标签内,所以我们要先找到“head”标签
代码如下:
import requests
#导入BeautifulSoup 用来解析html
from bs4 import BeautifulSoup as bf
head = {
"User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebLit/537.36(KHTML,like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
s = requests.get("http://www.baidu.com", headers=head)
#print(s.text)
# 解析html
obj = bf(s.content, 'html.parser')
#获取head标签下的title标签
title = obj.head.title
print(title)
大家只需要注意关于解析html的部分就好了
接下来是运行结果
成功了,鼓掌·······谢谢大家
三、注意点和过程中的报错
在运行的时候大家可能会遇到“No module named 'requests'”这个错误,代表你没有安装“requests”模块,当然你解析html使用的bs4也有可能没有安装,这时候我们怎么办呢?安装就可以了 在命令行输入“pip install requests” 就可以安装“requests”模块了,bs4模块的安装也是一样的在命令行输入“pip install bs4” 即可
安装requests时我又遇到了一个安装模块超时的错误,报“raise ReadTimeoutErrorself._pool, None, 'Read timed out.'”这是怎么办呢?狂百度 找到一篇文章延时处理解决了代码如下
pip --default-timeout=100 install requests
我是安装requests出现的问题,大家如果是安装其他库出现这个问题只需要修改 install后面的第三方库名就可以了
这里我附上帮我解决问题的大神的博客,他写了三种方式:https://blog.csdn.net/weixin_42462804/article/details/104713714
(不知道会不会侵权,侵权的话请联系我删掉,谢谢)