小P同学学习Python已经有一段时间了,这不,今天开始准备接触Python爬虫方面的知识。
今天要爬的比较简单,度娘首页和搜索页 ?
爬虫之前的准备工作
工欲善其事,必先利其器。小P开始对Python的爬虫工具进行准备。
- 操作系统:Win10
- Python 3.x
- urllib:这是Python内嵌的网页处理工具,不用单独下载
- BeautifulSoup:支持标准的html的解析,下载网页后的分析就靠它了,这个标准Python库没有,需要单独下载。
爬虫工具检查与安装
首先利用pip list检查一下工具包的安装情况:
很明显beautifulsoup没有装,这里小P准备使用最新版本的beautifulsoup - beautifulsoup4,简称bs4.
安装使用命令: pip install beautifulsoup4
安装完成后重新检查:pip list, bs4已经在本地了:
爬虫程序 (一)
小P觉得干啥事不能好高骛远,今天第一步先把百度首页扒一扒。
程序第一版:
from urllib import request
url = "http://www.baidu.com"
response = request.urlopen(url)
print(response)
小P很得意,看看看,第一版的小爬虫出来了。执行一下:
“咦,好像打印的结果是一个HttpResponse的对象,不是网页源代码?”
那就修改下代码,查下度娘,要读取HttpResponse里面的内容需要使用response.read().decode('UTF-8‘)的方法
from urllib import request
url = "http://www.baidu.com"
response = request.urlopen(url)
# 读取httpResponse返回的源代码
pageInfo = response.read().decode('UTF-8')
print(pageInfo)
欧耶! 第一个小爬虫实验成功了!!!
那能不能更进一步把爬虫代码优化一下,接下来就要用到BeautifulSoup了,小P同志开始信心百倍冲击下面一个难题。
程序第二版
既然已经返回了首页的源代码,那接下来小P开始要开始对源代码进行html解析,使用BeatifulSoup可以解析html和xml。
这里小P同学开始要对搜索结果进行爬取了。
首页小P在百度首页搜索一下python3
分析了下上面查询的页面:
- 百度搜索关键字可以使用URL: https://www.baidu.com/s?wd=xxx
- 小P想返回结果的标题
如果要返回页面的标题,小P使用了Firefox浏览器的F12开发者模式:
在源代码中小P发现了一些标题的规律:- 标题都包含在< a > 标题 < /a >中
- 都有data-click属性
- href 都以 http://www.baidu.com/link开头
为了对返回的代码内容进行缩减,需要导入re正则表达式模块,修改了下代码如下:
from urllib import request
from bs4 import BeautifulSoup
import re
url = "http://www.baidu.com/s?wd=Python3"
response = request.urlopen(url)
soup = BeautifulSoup(response,'html.parser')
#返回html中符合以下内容的所有节点
#1. 包含<a></a>
#2. 具有data-click方法,并且以'{'开头
#3. href中以http://www.baidu.com/link开头
links = soup.find_all('a', {'data-click':re.compile(r'^{'),'href':re.compile(r'^http://www.baidu.com/link')})
for each_link in links:
print(each_link.text)
执行结果如下:
哈哈哈…小P得意的笑了,小爬虫第一弹正式完成。
接下来下一站要加入header和保存到本地文件的功能,顺便看看能不能下载图片 ?