python爬虫|python爬虫快速入门(零基础也看得懂)
网络爬虫分类
- 通用网络爬虫(搜索引擎使用,遵守robopts协议)
robots协议:网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,通用网络爬虫需要遵守robots协议(君子协议)
查看网站的robots协议: https://www.baidu.com/robots.txt - 聚焦网络爬虫:自己写的爬虫程序
- 确定需要爬取的URL地址
- 由请求模块向URL地址发出请求,并得到网站的响应
- 利用解析模块从响应内容中提取所需数据
所需数据,保存
页面中有其他需要继续跟进的URL地址,则继续第2步去发请求,如此循环
文章图片
文章图片
文章图片
注意:
res.geturl() 返回实际地址解释:有些网页可能会进行重定向,从而返回另一个地址
代码举例:
from urllib import request
#获得相应对象
res=request.urlopen(url='http://www.baidu.com/')
#获取网页源代码(默认是字节串,需要转为字符串)
html=res.read().decode()
#获取实际地址
url=res.geturl()
#返回http响应码
code=res.getcode()print(res)
print('='*30)
print(html)
print('='*30)
print(url)
print('='*30)
print(code)
结果:
==============================
......
==============================
http://www.baidu.com/
==============================
200
问题:
文章图片
我们用于通过相关访问的数据:
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Mobile Safari/537.36
通过python爬虫访问的数据如下:
headers下面内容
文章图片
如何改进?
文章图片
文章图片
代码举例:
from urllib import request
# 1.定义常用变量
url='http://httpbin.org/get'
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'}
# 2.包装请求
req=request.Request(url=url,headers=headers)
# 3.发请求
res=request.urlopen(req)
# 4.获取响应内容
html=res.read().decode()
print(html)
结果:
{"args": {
},
"headers": {"Accept-Encoding": "identity",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1;
WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
"X-Amzn-Trace-Id": "Root=1-6117d0cb-6a429a376d4882805141367c"
},
"origin": "222.137.196.191",
"url": "http://httpbin.org/get"
}
总结:
文章图片
urllib.parse编码
- 作用:给URL地址中查询参数进行编码
- 导入方式
import urllib.parse
from urllib import parse - 示例(url不能直接识别中文,需要编码进行转换)
–编码前:https://www.baidu.com/s?wd=美女
–编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
文章图片
拼接url的三种方式
文章图片
小练习:
文章图片
代码演示:
from urllib import request
from urllib import parse
# 1.拼接url地址
word = input('请输入百度搜索关键字:')
params=parse.urlencode({
'wd':word})
url='http://www.baidu.com/s?{}'.format(params)#这个url我们需要提前观察它的结构
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'}
# 2.发请求获取响应内容
req=request.Request(url=url,headers=headers)
res=request.urlopen(req)
html=res.read().decode()
print(html)
# 3.保存到本地文件
filename=word+'.html'
with open(filename,'w',encoding='utf-8') as f:
f.write(html)
总结:
文章图片
入门实战案例:
文章图片
文章图片
静态爬取一般步骤:
文章图片
代码如下:
class BaiduTiebaSpider:
def __init__(self):
self.ur1 = 'http://tieba.baidu.com/f?kw={}&pn={}'
self.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'}
def get_html(self,url):
req=request.Request(url=url,headers=self.headers)
res=request.urlopen(req)
html=res.read().decode()return html
def parse_html(self):
"""解析提取数据的函数"""passdef save_html(self,filename,html):
with open(filename,'w',encoding='utf8') as f:
f.write(html)
def run(self):
name=input('请输入贴吧名:')
start=int(input('请输入起始页:'))
end=int(input('请输入终止页:'))
params=parse.quote(name)
# 1.拼接url地址
for page in range(start,end+1):
pn=(page-1)*50#根据所选贴吧url规律计算得出
url=self.ur1.format(params,pn)
html=self.get_html(url)
filename='{}_第{}页.html'.format(name,page)
self.save_html(filename,html)
#终端打印提示
print('第%d页抓取成功' % page)
# 控制数据抓取的频率
time.sleep(random.randint(1,3))
test=BaiduTiebaSpider()
test.run()
结果:
请输入贴吧名:赵丽颖
请输入起始页:1
请输入终止页:3
第1页抓取成功
第2页抓取成功
第3页抓取成功
总结:
文章图片
温馨提示: 【python爬虫|python爬虫快速入门(零基础也看得懂)】相关操作一定要在法律允许的范围内进行!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- 爬虫数据处理HTML转义字符