Python爬虫学习,项目笔记。
需求
https://movie.douban.com/top250
是豆瓣电影top250网页,上面有电影名称、导演、电影评分、电影封面图等信息。我们希望将其获取下来
准备工作
- 通过观察发现,URL的格式为
https://movie.douban.com/top250?start=<xx>
,网站会从start+1的数字开始,列出下面的25条电影信息 - 借助浏览器的检查工具:
- Elements工具可以方便的提供我们所需要的信息在网页html文件中的位置。
- Network工具可以获取到我们向浏览器发送的请求信息,包括cookie,Header,Response等等
-
需要使用的python库如下,网络状态良好的话可以通过
pip install xxx
进行安装。import urllib.request, urllib.error #指定URL,获取网页数据 import bs4 # 网页解析,获取数据 import re # 正则表达式,进行文字匹配 import xlwt # 进行excel操作 import sqlite3 # 进行SQLite数据操作(数据库相关)
获取数据
爬取网页
python使用urllib库获取页面
首先要制定头部信息head。在访问网页时,头部信息可以在 浏览器检查中Network中的Headers栏目找到。
-
头部信息是一个字典,里面的信息成对出现。
-
request.Request函数:可以将待访问的URL,头部信息Headers等内容封装起来。
解析数据
BeautifulSoup是一个很强大的
正则表达式的常用操作字符
操作符 | 说明 | 实例 |
---|---|---|
. |
表示任何单个字符 | |
[ ] |
字符集,对单个字符给出取值范围 | [abc]表示a、b、c,[a-z]表示a到z单个字符 |
[^ ] |
非字符集,对单个字符给出排除范围 | [^abc]表示非a非b非的单个字符 |
* |
前一个字符0次或无限次扩展 | abc*表示ab、abc、abcc等 |
+ |
前一个字符1次或无限次扩展 | abc*表示abc、abcc、abccc等 |
? |
前一个字符0次或1次扩展 | abc?表示ab、abc |
| |
左右表达式任意一个 | abc|def表示abc、def |
{m} |
扩展前一个字符m次 | ab{2}c表示abc、abbc |
{m,n} |
扩展前一个字符m至n次(含n) | ab{1,2}c表示abc、abbc |
^ |
匹配字符串开头 | ^abc表示abc且在一个字符串的开头 |
$ |
匹配字符串结尾 | abc$表示abc且在一个字符串的结尾 |
( ) |
分组标记,内部只能用| 操作符 |
(abc)表示abc,(abc|def)表示abc、def |
\d |
数字,等价于[0-9] | |
\w |
单词字符,等价于[A-Za-z0-9_] |
参考视频
from urllib import request, error
import socket
# 异常处理:urllib.error
try:
resp = request.urlopen('http://www.google.com')
except error.HTTPError as e:
print("The serer couldn't fulfill the request.")
print("Error code: ", e.code)
except error.URLError as e:
print("We failed to reach a server.")
print("Reason: ", e.reason)
if isinstance(e.reason, socket.timeout):
print("连接超时")
else:
print("请求成功")