地址和请求头参数--url和header
res = requests.get(url,headers=headers) 向网站发起请求,并获取响应对象
参数
- url :需要抓取的URL地址
- headers : 请求头
- timeout : 超时时间,超过时间会抛出异常
响应对象(res)属性
- encoding :响应字符编码 res.encoding = 'utf-8'
- text :字符串 网站源码
- content :字节流 字符串网站源码
- status_code :HTTP响应码
- url :实际数据的URL地址
import requests
url = 'http://www.baidu.com/' # 爬取百度网页
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 \
(KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}
res = requests.get(url, headers=headers)
print(res.encoding) # 查看网站的编码格式 ISO-8859-1
# text属性获取响应内容(字符串)网站源码
res = requests.get(url,headers=headers)
res.encoding = 'utf-8'
html = res.text
# content属性获取响应内容(字节串 bytes)网站源码
res = requests.get(url,headers=headers)
html = res.content.decode('utf-8')
print(res.status_code) # 查看响应码 200
print(res.url) # 查看访问的URL地址 https://www.baidu.com/
非结构化数据的保存方式
像压缩文件zip、图片文件等都可以使用非结构化数据的保存方式
with open('xxx.jpg','wb') as f:
f.write(res.content)
示例:保存赵丽颖图片到本地
import requests
url = 'http://dingyue.nosdn.127.net/lL1JH2YdpAWrzEhfp8BrJ8lTHa1602AEX9E7qpTpH5NzW1535203788506compressflag.jpg'
headers = {'User-Agent': 'Mozilla/5.0'}
html = requests.get(url, headers=headers).content
# 把图片保存到本地
with open('赵丽颖.jpg', 'wb') as f:
f.write(html)
百度贴吧图片抓取
目标:抓取指定贴吧所有图片
思路
- 获取贴吧主页URL,下一页,找到不同页的URL规律
- 获取1页中所有帖子URL地址: [帖子链接1,帖子链接2,...]
- 对每个帖子链接发请求,获取图片URL
- 向图片的URL发请求,以wb方式写入本地文件
贴吧URL规律:http://tieba.baidu.com/f?kw=??&pn=50
xpath表达式
1、帖子链接xpath,这里为什么属性选择class,因为相同的元素他们要相同的样式
//div[@class="t_con cleafix"]/div/div/div/a/@href
2、图片链接xpath
//div[@class="d_post_content j_d_post_content clearfix"]/img[@class="BDE_Image"]/@src
3、视频链接xpath
//div[@class="video_src_wrapper"]/embed/@data-video
# 注意: 此处视频链接前端对响应内容做了处理,需要查看网页源代码来查看,复制HTML代码在线格式化
百度贴吧视频抓取反爬机制(对响应内容做处理)
网页源代码是: