0
点赞
收藏
分享

微信扫一扫

python之网络爬虫


python之网络爬虫

urllib.request模块提供了最基本的构造HTTP请求的方法,同时它还带有处理授权、重定向、浏览器Cookie及其他内容。
代码如下:

import urllib.request

response=urllib.request.urlopen("http://python.org") #获取服务器返回的信息
print(response.read().decode("utf-8")) #解码,使用utf-8

其他爬虫库:
首先需要安装好requests库,之后引用库import requests
1、requests对象的属性
get(url,timeout=n)对应于http的get方法,设定每次请求超时时间为n秒
status_code请求的返回状态,整数,200表示连接成功,404表示失败
raise_for_status()如果不是200,则产生异常
text即url对应的页面内容
encoidng响应内容的编码形式
content响应内容的二进制形式

import requests
r=requests.get("http://www.baidu.com")
r.status_code
r.encoding
r.text

python之网络爬虫_html页面


需要制定编码方式是utf-8才能正常显示中文字符

python之网络爬虫_html_02


其他请求类型:

import requests
r=requests.post("http://www.baidu.com")
r=requests.put("http://www.baidu.com")
r=requests.delete("http://www.baidu.com")
r=requests.head("http://www.baidu.com")
r=requests.options("http://www.baidu.com")
print(r.text)

2、BeautifulSoup库对HTML页面格式进行解析
对HTML页面格式进行解析的代码

from bs4 import BeautifulSoup
soup=BeatifulSoup(r.text)

BeautifulSoup对象的常用属性有head、title、body、p、strings、stripped_strings

爬虫实例:USNews 美国大学排名
在做爬虫之前首先需要对网页的标签有一个大致的了解,我之所以用soup.find(“table”)而不是soup.find_all(“table”)是因为我发现我需要的内容已经包含在第一个table标签里了,find方法是返回第一个指定的标签内容,find_all是返回所有的标签内容。

import requests
from bs4 import BeautifulSoup
rank=[]

def getHTMLText(url):
try:
r=requests.get(url,timeout=30) #获取HTML页面内容
r.raise_for_status()
r.encoding="utf-8" #指定解码方式
return r.text #返回文本内容
except:
return "NO"

def fillList(soup):
table=soup.find("table") #寻找到第一个table标签的内容
data=table.find_all("tr") #寻找所有tr标签的内容
for tr in data: #遍历
single=[]
ltd=tr.find_all("td") #寻找到所有td标签的内容
for td in ltd:
if len(td) !=0:
single.append(td.string) #将字符串的部分填入列表
else:
continue
rank.append(single)


url="http://rankings.betteredu.net/usnews/best-colleges/national-universities-rangkings/2019.html" #指定网址
r=getHTMLText(url) #得到HTML页面内容
soup=BeautifulSoup(r,"html.parser") #解析HTML页面内容
fillList(soup) #填充列表
for i in range(len(rank)): #打印输出
print(rank[i])

python之网络爬虫_html_03


举报

相关推荐

0 条评论