python爬虫学习小组 任务1

您所在的位置:网站首页 21世纪初我国取得了哪些典型的外交成就 python爬虫学习小组 任务1

python爬虫学习小组 任务1

2022-05-25 05:12| 来源: 网络整理| 查看: 265

任务1.1 学习get与post请求

Requests库 是python的第三方库,是目前公认的爬取网页最好的工具。

1.1.1 Requests库有7个主要的方法: requests.request() 构造一个请求,支撑以下6个方法的基础方法 requests.get() 获取HTML页面的主要方法,对应于HTTP的GET requests.head() 获取HTML页面头信息的方法,对应于HTTP的HEAD requests.post() 向HTML页面提交POST请求的方法,对应于HTTP的POST requests.put() 向HTML页面提交PUT请求的方法,对应与HTTP的PUT requests.patch() 向HTML页面提交局部修改请求,对应于HTTP的PATCH requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE 1.1.2 Requests库的get方法

获得一个网页最简单的方法就是一行代码:

>>> r = requests.get(url)

Response对象常用的5个属性

r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败 r.text HTTP响应内容的字符串形式,即url对应的页面内容 r.encoding 从HTTP header中猜测的响应内容的编码方式 r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式) r.content HTTP相应内容的二进制形式 >>> r = requests.get("http://www.baidu.com") >>> r.status_code 200 >>> r.text '\r\n ç\x99¾åº¦ä¸\x80ä¸\x8bï¼\x8cä½\xa0å°±ç\x9f¥é\x81\x93 æ\x96°é\x97» hao123 å\x9c°å\x9b¾ è§\x86é¢\x91 è´´å\x90§ ç\x99»å½\x95 document.write(\'ç\x99»å½\x95\'); æ\x9b´å¤\x9a产å\x93\x81

å\x85³äº\x8eç\x99¾åº¦ About Baidu

©2017;Baidu;使ç\x94¨ç\x99¾åº¦å\x89\x8då¿\x85读; æ\x84\x8fè§\x81å\x8f\x8dé¦\x88;京ICPè¯\x81030173å\x8f·;

\r\n' >>> r.encoding = "utf-8" >>> r.text '\r\n 百度一下,你就知道 新闻 hao123 地图 视频 贴吧 登录 document.write(\'登录\'); 更多产品

关于百度 About Baidu

©2017;Baidu;使用百度前必读; 意见反馈;京ICP证030173号;

\r\n' >>> 1.1.3 爬取网页的通用代码框架 Requests库的7种异常 requests.ConnectionError 网络连接错误异常,如DNS查询失效、拒绝连接等 requests.HTTPError HTTP错误异常 requests.URLRequired URL缺失异常 requests.ToomanyRedirects 超过最大重定向次数,产生重定向异常 requests.ConnectTimeout 连接远程服务器超时异常 requests.Timeout 请求URL超时,产生超时异常 r.raise_for_status() 如果不是200,产生异常requests.HTTPErrer 通用代码框架 def getHTMLText(url): try: r = requests.get(url, timeout=30) r.raise_for_status() #如果状态不是200,引发HTTPError异常 r.encoding = r.apparent_encoding return r.text except: return "产生异常" 任务1.2 正则表达式

理论还在学习,待补充。。。

爬取豆瓣电影250

参考代码如下:

# -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import re import time import sys def getHTMLText(url,k): try: if(k==0):kw={} else: kw={'start':k,'filter':''} r = requests.get(url,params=kw,headers={'User-Agent': 'Mozilla/4.0'}) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print("Failed!") def getData(html): soup = BeautifulSoup(html, "html.parser") movieList=soup.find('ol',attrs={'class':'grid_view'})#找到第一个class属性值为grid_view的ol标签 moveInfo=[] for movieLi in movieList.find_all('li'):#找到所有li标签 data = [] #得到电影名字 movieHd=movieLi.find('div',attrs={'class':'hd'})#找到第一个class属性值为hd的div标签 movieName=movieHd.find('span',attrs={'class':'title'}).getText()#找到第一个class属性值为title的span标签 #也可使用.string方法 data.append(movieName) #得到电影的评分 movieScore=movieLi.find('span',attrs={'class':'rating_num'}).getText() data.append(movieScore) #得到电影的评价人数 movieEval=movieLi.find('div',attrs={'class':'star'}) movieEvalNum=re.findall(r'\d+',str(movieEval))[-1] data.append(movieEvalNum) # 得到电影的短评 movieQuote = movieLi.find('span', attrs={'class': 'inq'}) if(movieQuote): data.append(movieQuote.getText()) else: data.append("无") print(outputMode.format(data[0], data[1], data[2],data[3],chr(12288))) #将输出重定向到txt文件 output=sys.stdout outputfile=open("moviedata.txt",'w',encoding='utf-8') sys.stdout=outputfile outputMode= "{0:{4}^20}\t{1:^10}\t{2:^10}\t{3:{4}


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3