pythonrequests返回值为200但是text⽆内容_Python简单爬⾍
【⼊门必学】
简单抓取⽹页的代码
import requests#导⼊requests包
from bs4 import BeautifulSoup#从bs4中导⼊BeauifulSoup包
import re#导⼊正则表达式的包
r = ("baidu")
soup = )
type(soup)#查看当前soup对象的类型
r.head#此后就可以抓取rr对象的属性了,⽐如head,title,body等
另外很多⼈在学习Python的过程中,往往因为没有好的教程或者没⼈指导从⽽导致⾃⼰容易放弃,为此我建了个Python交流.裙 :⼀久武其⽽⽽流⼀思(数字的谐⾳)转换下可以到了,⾥⾯有最新Python教程项⽬可拿,不懂的问题多跟⾥⾯的⼈交流,都会解决哦。。。。如果要抓取本地的静态⽹页的代码的话,我曾经抓取不成功,但是我想了其他的办法,还是使⽤上述代码,只不过url地址换成了本地的⽂件地址了⽽已,需要注意的是,我是在IDEA⾥⾯编写并且运⾏我的HTML代码的,并且通过IDEA⽣成了⼀个本地局域⽹的端⼝,复制它的路径,再导⼊url中,即可抓取本地静态HTML代码,如果我把这个浏览器或则IDEA关了的话,则python抓取的时候则会报错。
下⾯是爬⾍爬取⼤学排名的代码:
allUniv = []#建⽴⼀个⼆维列表,存储所有表格信息
def getHTMLText(url):#获取传⼊的地址
try:#进⾏异常的处理渐变图片简笔画
r = (url,timeout = 30)#参数1:某⽹页的url地址,参数2:设定每次请求超时时间为n秒
r.raise_for_status()#如果次参数不是200,则产⽣异常,进⼊异常处理语句,否则程序继续往下⾛
#HTTP相应内容的字符串形式,即url对应的页⾯内容
except:java的集合类
return ""
def fillUnivList(soup):
data = soup.find_all('tr')#通过soup对象的find_all属性到抓取的⽹页中的所有tr标签
for tr in data:
ltd = tr.find_all('td')#再在每个tr标签中到所有的td标签
if len(ltd) == 0:#如果这⼀⾏的tr中的td标签数为0个的话,则跳过这个tr,继续进⾏下⼀个
continue
singleUniv = []#将这个⼤学的各项信息载⼊列表
for td in ltd:
jquery下载文件请求singleUniv.append(td.string)#提取已载⼊singleUniv列表的td标签中的信息,
allUniv.append(singleUniv)#提取singleUniv列表中的信息到allUniv列表中
def printUnivList(num):
print("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}{5:{0}^10}".format(chr(12288),"排名","学校名称","省份","总分","培养规模"))#注意输出格式的控制    for i in range(num):
u = allUniv[i]
print("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}{5:{0}^10}".format(chr(12288),u[0],u[1],u[2],eval(u[3]),u[6]))
def main(num):
url = 'www.zuihaodaxue/zuihaodaxuepaiming2019.html'#设定⽹页的地址
html = getHTMLText(url)#将url地址传⼊函数,返回字符串形式给变量html
soup = BeautifulSoup(html,"html.parser")#⽣成⼀个soup的对象,此时soup就是⼀个BeautifulSoup对象
preference英文fillUnivList(soup)#将soup对象传⼊函数
printUnivList(num)
main(300)
在代码中都有详细的注释即理解,希望对你有所帮助。
下⾯是搜索关键字⾃动提交的爬⾍代码:
import re
import json
layoutinflater
def getKeywordResult(keyword):
url = 'www.baidu/s?wd='+keyword
try:
r = (url, timeout=30)
r.raise_for_status()
except:
return ""
def parserLinks(html):
soup = BeautifulSoup(html, "html.parser")
links = []
for div in soup.find_all('div', {'data-tools': repile('title')}):
data = div.attrs['data-tools']  #获得属性值
d = json.loads(data)        #将属性值转换成字典
links.append(d['title'])    #将返回链接的题⽬返回
return links
def main():
html = getKeywordResult('Python语⾔程序设计基础(第2版)')
ls = parserLinks(html)
count = 1
for i in ls:
print("[{:^3}]{}".format(count, i))
count += 1
main()
相关操作与其步骤的含义与其上的代码如出⼀辙,请仔细参悟
下⾯给出requests库的相关属性
requests库是⼀个简洁且简单的处理HTTP请求的第三⽅库,它的最⼤优点是程序边学过程更接近正常URL访问过程。requests库⽀持⾮常丰富的链接访问功能,包括国际域名和URL获取、HTTP长连接和连接缓存、HTTP会话和Cookie保持、浏览器使⽤风格的SSL验证、基本的摘要认证、有效的键值对Cookie记录、⾃动解压缩、⾃动内容解码、⽂件分块上传、HTTP(S)代理功能、连接超时处理、流数据下载等。
⽹络爬⾍和信息提交只是requests库能⽀持的基本功能,requests库中的⽹页请求函数:
get(url,timeout = n)  对应HTTP的get⽅式,获取⽹页最常⽤的⽅法,可以增加timeout=n参数,设定每次请求超时时间为n秒
post(url,data = {'key':'value'})  对应HTTP的post⽅式,其中字典⽤于传递客户数据
delete(url)  对应于HTTP的delete⽅式
head(url)  对应于HTTP的head⽅式
options(url)  对应于HTTP的options⽅式
put(url,data = {'key':'value'})  对应于HTTP的put⽅式,其中字典⽤于传递客户数据
<()代表请求过程,它返回的Response对象代表响应,Response对象的属性如下:
status_code:HTTP请求的返回状态,整数,200表⽰连接成功,404表⽰失败
text:HTTP响应内容的字符串形式,即url对应的页⾯内容
encoding:HTTP响应内容的编码⽅式
content:HTTP响应内容的⼆进制形式
Response对象的⽅法:
json():如果HTTP响应内容包含JSON格式数据,则该⽅法解析JSON数据
raise_for_status():如果不是200,则产⽣异常
-------------------------------------------------------------------------------------------------------------------------
beautifulsoup4库的使⽤
使⽤requests库获取HTML页⾯并将其转化成字符串后,需要进⼀步解析HTML页⾯格式,提取有⽤信息,这需要处理HTML和XML的函数库。beautifulsoup4库,也成为Beautiful Soup库或者bs4库,⽤于解析和处理HTML和XML。需要注意的是,它不是BeautifulSoup 库。它的最⼤优点是能根据HTML和XML语法建⽴解析树,进⽽⾼效解析其中的内容。beautifulsoup4库采⽤⾯向对象思想实现,简单地说,它把每个页⾯当作⼀个对象,通过<a>.<b>()的凡是调⽤⽅法(即处理函数),BeautifulSoup中常⽤的⼀些属性如下:
head:HTML页⾯的<head>内容
title:HTML页⾯标题,在<head>之中,有<title>标记
body:HTML页⾯的<body>内容
p:HTML页⾯中第⼀个<p>内容
strings:HTML页⾯所有呈现在Web上的字符串,即标签的内容
stripped_strings:HTML页⾯所有呈现在Web上的⾮空格字符串
BeautifulSoup属性与HTML的标签名称相同,远不⽌这些。
标签对象的常⽤属性:
name:字符串,标签的名字,⽐如div
attrs:字典,包含了原来页⾯Tag所有的属性,⽐如href
contents:列表,这个Tag下所有⼦Tag的内容
string:字符串,Tag所包围的⽂本,⽹页中真是的⽂字,string属性的返回值遵循如下原则:
java后端有必要学算法吗
(1)如果标签内部没有其他标签,string属性返回其中的内容。
(2)如果标签内部还有其他标签,但只有⼀个标签,string属性返回最⾥⾯标签的内容。
(3)如果标签内部有超过1层嵌套的标签,string属性返回None(空字符串)。
BeautifulSoup其中的两个⽅法(这两个⽅法会遍历整个HTML⽂档,按照条件返回标签内容):
BeautifulSboup.find_all(name,attrs,recursive,string,limit)
作⽤:根据参数到对应的标签,返回列表类型。参数如下:
name:按照tag标签,名字⽤字符串形式表⽰,例如div、li。
attrs:按照tag标签属性值检索,需要列出属性名称和值,采⽤JSON表⽰。
recursive:设置查层次,只查当前标签下⼀层时使⽤recursive=False。
string:按照关键字检索string属性内容,采⽤string=开始。
limit:返回结果的个数,默认返回全部结果。
简单地说,BeautifulSoup的find_all()⽅法可以根据标签名字、标签属性和内容检索并返回标签列表,通过⽚段字符串检索时需要使⽤正则表达式re函数库,re时Python标准库,直接通过import re即可使⽤。采⽤relile('jquery')实现对⽚段字符串(如‘jquery’)的检索。当对标签属性检索时,属性和对应
的值采⽤JSON格式,例如:'src':repile('jquery'),其中,键值对中值的部分可以是字符串或者正则表达式。
除了find_all()⽅法,BeautifulSoup类还提供⼀个find()⽅法,它们的区别只是前者返回全部结果⽽后者返回到的第⼀个结果,find_all()函数由于可能返回更多结果,所以采⽤列表形式:find()函数返回字符串形式。
BeautifulSoup.find(name,attrs,recursive,string)
作⽤:根据参数到对应标签,采⽤字符串返回到的第⼀个值。
参数:与find_all()⽅法⼀样。
另外很多⼈在学习Python的过程中,往往因为没有好的教程或者没⼈指导从⽽导致⾃⼰容易放弃,为此我建了个Python交流.裙 :⼀久武其⽽⽽流⼀思(数字的谐⾳)转换下可以到了,⾥⾯有最新Python教程项⽬可拿,不懂的问题多跟⾥⾯的⼈交流,都会解决哦!
本⽂的⽂字及图⽚来源于⽹络加上⾃⼰的想法,仅供学习、交流使⽤,不具有任何商业⽤途,版权归原作者所有,如有问题请及时以作处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。