爬虫不过如此(python 详细篇)

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

爬虫的本质就是一段自动抓取互联网信息的程序,从网络获取感兴趣的信息,抓取对于我们有价值的信息,爬虫技术是大数据和云计算的基础。

爬虫的实现可认为是模拟浏览器与服务器数据交互,伪造HTTP请求。

 

使用总览

网页爬取库:

1、urllib模块的urllib.request       

#基本被取代

 

2、requests 第三方库               

#中小型爬虫开发

#官网:

 

3、Scrapy 框架                         

#大型爬虫开发

 

内容解析库:

1、BeautifulSoup库

#提取HTML和XML里的数据   

#官网https://www.crummy.com/software/BeautifulSoup/bs4/doc/

 

2、re模块

#正则表达式,处理字符串

 

查看网站爬虫协议

url/robots.txt

 

requests库基本使用:

安装: 

sudo pip3 install requests

 

使用介绍:

1 import requests #导入库 2 3 4 #get请求数据 5 res=requests.get("")#get请求URL 6 # res=requests.get("http://www.baidu.com",params={"w1":"ww11","w2":"ww22"})#get带参数请求 7 print(res.url)#获取到访问的URL 8 9 10 11 #post请求数据 12 res=requests.post("")#post请求URL 13 # res=requests.get("http://www.baidu.com",data={"w1":"ww11","w2":"ww22"})#post带参数请求 14 15 #post上传文件 16 #filex={"img":open('dongdd/web.py','rb')}#文件表单 17 #filex={"img":("evil.jpg",open('dongdd/1.jpg','rb'))}#指定文件名更改为evil.jpg 18 filex={"img":("veil.txt","人的一切痛苦,\r\n本质上是对自己无能的愤怒!\r\n wowo")}#以文件保存字符串 19 res=requests.post(urlx,files=filex) 20 21 22 23 #cookies 24 #cookie在请求页第一次设置后是不能马上用下列函数拿到值的,必须是请求前存在 25 26 print(res.cookies)#打印所有cookie 27 print(res.cookies["us"])#获取单个cookie 28 29 #携带自定义cookie,可做当次页面cookie比较验证 30 coo={"cc1":"ccc01","cc2":"ccco2"} 31 res=ss.post(":8080/login.php",cookies=coo) 32 33 #自动携带网站上的cookie,访问页面,上面代码设置cookie的不可被自动携带,必须每次手动 34 ss=requests.Session() 35 res=ss.post(":8080/login.php") 36 res=ss.post(":8080/cancel.php")#可做页面1中cookie验证 37 38 39 40 #超时 41 #默认为一直请求URL,处于停止状态,所以必须要设置超时 42 res=requests.post(":8080/login.php",timeout=0.2)#连接时间为:0.2s 43 #设置连接超时和读超时:timeout=(3.05, 27) #第一个为规定连接时间,第二个为规定读取时间 44 #永远等待相应:timeout=None 45 46 47 #修改或添加请求头,请求头的必要参数可修改 48 headx={'User-Agent': 'wwwwwwwww', 'Connection': 'xxxxxxx', 'tt': '--------'} 49 res=requests.get("",headers=headx) 50 print(res.request.headers)#获取请求头 51 52 #其他相关参数 53 print(res.status_code)#获取访问状态码,200(系统常量:requests.codes.ok)为成功 54 print(res.raise_for_status())#请求错误时可以打印错误(4XX客户端错误或5XX服务器错误响应) 55 print(res.encoding)#查看编码 56 res.encoding="utf-8"#更改编码 另外值:ISO-8859-1 57 print(res.headers)#以字典形式打印相应头,HTTP标头名称不区分大小写 58 print(res.headers["date"])#print(res.headers.get("DAte"))打印出相应头时间信息 59 print(res.text)#打印网页源码 60 61 #json数据解析: 62 jsontt1=res.json()#得到json数据 63 print(jsontt1.keys())#输出所有json可键名 64 print(jsontt1["key11"])#获取单个键的数据 65 66 #二进制格式数据:res.content 67 #获取一张网络图片并存储实现: 68 res=requests.get("",timeout=5)#访问得到图片数据 69 f=open("ww.jpg","wb")#以二进制方式打开文件 70 f.write(res.content)#写入二进制数据 71 f.close()#必须关闭文件 72 73 #从服务器获取原始套接字响应,您可以访问res.raw,必须设置:stream=True 74 #数据只能使用一次(类似文件指针) 75 res=requests.get("",stream=True) 76 res.raw.read(10)#读十个字节 77 78 #另一种方式获取网页源代码: 79 res=requests.get("",stream=True) 80 rxx=res.raw.read(1)#读取一个字节 81 f=open("","wb") 82 while rxx:#判断是否为空 83 print(rxx) 84 f.write(rxx)#写一个字节 85 rxx = res.raw.read(1)#读下一个字节 86 f.close();#必须关闭文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjpg.html