Python爬虫练习 - 爬虫初体验

小P同学学习Python已经有一段时间了,这不,今天开始准备接触Python爬虫方面的知识。
今天要爬的比较简单,度娘首页和搜索页 ?

爬虫之前的准备工作

工欲善其事,必先利其器。小P开始对Python的爬虫工具进行准备。

  1. 操作系统:Win10
  2. Python 3.x
  3. urllib:这是Python内嵌的网页处理工具,不用单独下载
  4. BeautifulSoup:支持标准的html的解析,下载网页后的分析就靠它了,这个标准Python库没有,需要单独下载。

爬虫工具检查与安装

首先利用pip list检查一下工具包的安装情况:
Python爬虫练习 - 爬虫初体验
很明显beautifulsoup没有装,这里小P准备使用最新版本的beautifulsoup - beautifulsoup4,简称bs4.
安装使用命令: pip install beautifulsoup4
Python爬虫练习 - 爬虫初体验
安装完成后重新检查:pip list, bs4已经在本地了:
Python爬虫练习 - 爬虫初体验

爬虫程序 (一)

小P觉得干啥事不能好高骛远,今天第一步先把百度首页扒一扒。
程序第一版

from urllib import request

url = "http://www.baidu.com"
response = request.urlopen(url)
print(response)

小P很得意,看看看,第一版的小爬虫出来了。执行一下:
Python爬虫练习 - 爬虫初体验
“咦,好像打印的结果是一个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)

欧耶! 第一个小爬虫实验成功了!!!
Python爬虫练习 - 爬虫初体验

那能不能更进一步把爬虫代码优化一下,接下来就要用到BeautifulSoup了,小P同志开始信心百倍冲击下面一个难题。
程序第二版
既然已经返回了首页的源代码,那接下来小P开始要开始对源代码进行html解析,使用BeatifulSoup可以解析html和xml。
这里小P同学开始要对搜索结果进行爬取了。
首页小P在百度首页搜索一下python3
Python爬虫练习 - 爬虫初体验
分析了下上面查询的页面:

  1. 百度搜索关键字可以使用URL: https://www.baidu.com/s?wd=xxx
  2. 小P想返回结果的标题
    如果要返回页面的标题,小P使用了Firefox浏览器的F12开发者模式:
    Python爬虫练习 - 爬虫初体验
    在源代码中小P发现了一些标题的规律:

为了对返回的代码内容进行缩减,需要导入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)

执行结果如下:
Python爬虫练习 - 爬虫初体验
哈哈哈…小P得意的笑了,小爬虫第一弹正式完成。

接下来下一站要加入header和保存到本地文件的功能,顺便看看能不能下载图片 ?