Python爬虫入门之 初识爬虫
简单介绍Python爬虫相关的知识
文章目录
- Python爬虫入门之 初识爬虫
- 1. 什么是爬虫?
- 2. requests的基本使用
- 2.1 你的第一个爬虫程序
- 2.2 headers请求头的重要性
- 3. 案例:豆瓣电影`Top250`数据请求
- 4. 网页解析
推荐阅读:
- 使用xpath爬取数据
- jupyter notebook使用
- BeautifulSoup爬取豆瓣电影Top250
- 一篇文章带你掌握requests模块
- Python网络爬虫基础–BeautifulSoup
1. 什么是爬虫?
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
2. requests的基本使用
Python里边请求网页,一般用到的是requests
模块
安装模块
pip install requests
方法 | 描述 |
---|---|
requests.get() | 请求指定的页面信息,并返回实体主体 |
requests.post() | 向指定资源提交数据进行处理请求(例如提交表单) |
常用方法:
url
:需要请求的链接headers
: 请求头(很重要!!!)
响应对象:
方法 | 描述 | 用处 |
---|---|---|
text | 返回响应体文本信息 | 文本内容 |
content | 返回二进制响应内容 | 图片、音乐、视频等 |
status_code | 查看响应码 | 查看请求成功与否 |
json() | 返回json内容,将返回内容中的数据以键值对的方式提取出来 | json格式的数据 |
响应码:
状态码 | 描述 |
---|---|
1** | 指示信息–表示请求已接收,继续处理 |
2** | 成功–表示请求已被成功接收、理解、接受 |
3** | 重定向–信息不完整需要进一步补充 |
4** | 客户端错误–请求有语法错误或请求无法实现 |
5** | 服务器端错误–服务器未能实现合法的请求 |
2.1 你的第一个爬虫程序
代码语言:javascript复制import requests
url = 'https://www.baidu.com'
# 请求百度
resp = requests.get(url)
print(resp.text) # 查看文本
print(resp.content) # 查看二进制的响应内容
print(resp.status_code) # 查看响应码
2.2 headers请求头的重要性
这里咱们使用豆瓣电影Top250
来示例:
import requests
url = 'https://movie.douban.com/top250'
resp = requests.get(url)
print(resp.status_code) # 418
这里状态码返回为418,很明显是请求不成功该网址的,下面再说如何处理
状态码总结
所以这个时候应该给我们的requests请求添加请求头,即将自己伪装成浏览器去进行访问。 如果想为请求添加请求头,只要简单地传递一个
dict
给headers
参数就可以了。
3. 案例:豆瓣电影Top250
数据请求
豆瓣电影Top250
代码语言:javascript复制import requests
url = 'https://movie.douban.com/top250?start=0&filter='
headers = {
'user-agent':'Mozilla/5.0'
}
resp = requests.get(url,headers=headers)
print(resp.text)
4. 网页解析
这里介绍几个从数据中提取信息的方法:
方法 | 描述 |
---|---|
BeautifulSoup | 一个可以从HTML或XML文件中提取数据的Python库 |
XPath | 在XML文档中查找信息的语言 |
正则表达式(re) | 一个特殊的字符序列,它能方便的检查一个字符串是否与某种模式匹配。 |
这里只使用Xpath来做展示,其他的有兴趣可以自己动手学习哦!!
安装模块:
代码语言:javascript复制pip install lxml
pip install parsel
lxml模块:
代码语言:javascript复制from lxml import etree
parse_html = etree.HTML(html)
Selector模块:
代码语言:javascript复制from parsel import Selector
sel = Selector(html)
# xpath解析
sel.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[4]/text()').extract_first() # 第一个
sel.xpath().extract() # 全部
# css解析
sel.css()
代码语言:javascript复制from lxml import etree
parse_html = etree.HTML(resp.text)
# 电影名称
parse_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')
# 导演、演员
parse_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[1]')
# 上映日期
parse_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[2]')
# 评分
parse_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')
# 评论人数
parse_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[4]/text()')
# 评语
parse_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')