requests库安装:
pip install requests
安装完成之后,打开ide测试
import requests
# 访问百度
r = requests.get("http://wwww.baidu.com")
# 返回状态码
r.status_code
# 改变网页编码为utf-8
r.encoding = 'utf-8'
# 以文本格式显示网页信息
r.text
request库中常见的7种方法
r =request.get(url)
# 方法介绍
# 该方法构造一个向服务器请求资源的request对象
# 返回一个包含服务器资源的respon对象
request2库通用代码框架
import requests
def getHTMLText(url):
try:
r = requests.get(url)
r.raise_for_status() # 如果状态码不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
图片爬取存储代码
import requests
import os
url ='http://image.com.123.jpg'
root = 'D:/test'
path = root + url.split('/').[-1]
try:
if not os.path.exists(root):
mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,'wb') as f:
f.write(r.content)
f.close()
print('文件保存成功')
elif:
print('文件已存在')
except:
print('爬取失败')
Beautiful Soup库:
用来解析标签,以树状结构显示:
标签树遍历:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzXNwh0j-1583852947209)(https://uploader.shimo.im/f/mldmDFPneTU9LkrX.png!thumbnail)]
正则表达式:
操作符 | 说明 | 实例 |
---|---|---|
. | 表示任何单个字符 | |
[] | 字符集,对单个字符给出取值范围 | [abc]表示a、b、c,[a-z]表示a到z单个字符 |
[^] | 非字符集,对单个字符给出排除范围 | [^abc]表示非a或b或c的单个字符 |
* | 前一个字符0次或无限次扩展 | abc*表示ab、abc、abcc等 |
+ | 前一个字符1次或无限次扩展 | abc+表示abc、abcc等 |
? | 前一个字符0次或1次扩展 | abc?表示ab、abc |
| | 左右表达式任意一个 | abc|def表示abc、def |
{m} | 扩展前一个字符m次 | ab{2}c表示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] |
re库:
Tips:当正则表达式包含转移字符时,使用原生字符
re库主要功能函数:
函数 | 说明 |
---|---|
re.search() | 在一个字符串搜索匹配正则表达式的第一个位置,返回match对象 |
re.match() | 从一个字符串的开始位置起匹配正则表达式,返回match对象 |
re.findall() | 搜索字符串,以列表类型返回全部能匹配的子串 |
re.split() | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 |
re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
re.search(pattern,string,flags)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSgPQwno-1583852947210)(https://uploader.shimo.im/f/XkqxbwiE50c6vpYk.png!thumbnail)]
re库的贪婪匹配和最小匹配:
re库默认为贪婪匹配,即输出匹配最长的2子串
最小匹配:
Scrapy爬虫框架:
框架介绍:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7AeD0DG-1583852947214)(https://uploader.shimo.im/f/Jkp1ICTPWj8PARmw.png!thumbnail)]
Scrapy常用命令:
startproject | 创建一个新工程 | scrapy startproject[dir] |
---|---|---|
genspider | 创建一个爬虫 | scrapy genspider [options] |
settings | 获得爬虫配置信息 | scrapy settings [options] |
scrawl | 运行一个爬虫 | scrapy crawl |
list | 列出工程中所有爬虫 | scrapy list |
shell | 启动URL调试命令行 | scrapy shell [url] |
一个使用Scrapy的简单例子:
# 在命令行输入命令,建立一个工程
scrapy startproject python123demo
cd python123demo/
# 创建一个爬虫 demo为爬虫名称 python123.io为爬取网站
scrapy genspider demo python123.io
运行之后会产生一个demo.py文件:
然后更改demo.py中的代码:
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/ws/demo.html']
def parse(self, response):
fname = response.url.split('/')[-1]
with open(fname,'wb') as f:
f.write(response.body)
self.log('Saved file %s.' % fname)
# 然后在命令行执行运行爬虫的命令
scrapy crawl demo
执行命令之后,捕获页面存储在demo.html中:
yield关键字使用:生成器,可以利用一个存储单元实现输出一个列表
Request类
属性或方法 | 说明 |
---|---|
.url | Request对应的URL地址 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主体,字符串类型 |
.meta | 用户添加的扩展信息,在Srapy内部模块间传递信息使用 |
.copy() | 复制该请求 |
Response类
属性或方法 | 说明 |
---|---|
.url | Response对应的URL地址 |
.status | HTTP状态码,默认是200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容信息,字符串类型 |
.flags | 一组标记 |
.request | 产生Response类型对应的Request对象 |
.copy | 复制该相应 |
CSS Selector使用
<HTML>.css('a::attr(href)').extract()
# a是标签名称 href是标签属性