目录
- 1.百度/360搜索关键词提交
- 2.网络图片的爬取和存储
- 3.中国大学排名定向爬虫
1.百度/360搜索关键词提交
搜索引擎关键词提交接口
百度的关键词接口:
http://www.baidu.com/s?wd=keyword
360的关键词接口:
http://www.so.com/s?q=keyword
功能描述:
输入:需要搜索的关键词
输出:搜索引擎搜索到的条目数量
提示:通过搜索引擎关键词接口,利用自定义的关键词向搜索引擎申请服务,得到返回搜索引擎返回的内容,用len()函数获取条目数量
关键代码:r=requests.get(url,params=kv)
kv键值对用来传入欲搜索关键词
代码如下:
import requests
def gethtmltext(url):try:kv={'wd':keyword}r=requests.get(url,params=kv)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:print("爬取失败")
#if _name_ == "_main_":
url="http://www.baidu.com/s"
keyword=input("please input your requests:")
print(len(gethtmltext(url)))
实现效果:
2.网络图片的爬取和存储
网络图片链接的格式:
http://www.example.com/picture.jpg
从网上随意选择一张网页图片:
http://n.sinaimg.cn/sports/transform/282/w650h432/20190414/gmNm-hvscktf8159114.jpg
功能描述:
输入:网页图片URL链接
输出:将网页保存到本机指定目录与路径(root、path)
技术路线:requests-os
程序的结构设计:
我们使用了try/except
的框架保证爬取过程的稳定性与可靠性
首先if not
判断目的根目录是否存在,不存在就创建一个
接着if not
判断文件是否存在,如果不存在就执行爬虫请求,保存图片到指定路径
否则输出文件已存在
出现错误输出爬取失败
try:
if not
if not
else
except:
print(‘爬起失败’)
关键代码:
我们预先设置文件标识符为f with open(path,'wb') as f:
接着写入从网页上爬取的二进制数据流(r.content)f.write(r.content)
有关with as
的详细用法:https://www.cnblogs.com/DswCnblog/p/6126588.html
有关文件操作详细用法:https://blog.csdn.net/chenmozhe22/article/details/81434549
读取URL链接最后一个反斜杠/后的内容-即读取图片名path=root+url.split('/')[-1]
代码如下:
import requests
import os
def gethtmljpg(url,root,path):try:kv={'user-agent':'Mozilla/5.0'}r=requests.get(url,headers=kv)r.raise_for_status()r.encoding=r.apparent_encodingif not os.path.exists(root):os.makedirs(root)if not os.path.exists(path):with open(path,'wb') as f:f.write(r.content)f.close()print("图片保存成功")else:print("图片已存在")return r.textexcept:print("爬取失败")
#if _name_ == "_main_":
url="http://n.sinaimg.cn/sports/transform/282/w650h432/20190414/gmNm-hvscktf8159114.jpg"
#url=input("please input your url:")
root="D://PICS//"
path=root+url.split('/')[-1]
gethtmljpg(url,root,path)
实现效果:
3.中国大学排名定向爬虫
功能描述
输入:大学排名URL链接
输出:大学排名信息的屏幕输出(排名,大学名称,总分)
技术路线:requests‐bs4
定向爬虫:仅对输入URL进行爬取,不扩展爬取
程序的结构设计
步骤1:从网络上获取大学排名网页内容
步骤2:提取网页内容中信息到合适的数据结构
步骤3:利用数据结构展示并输出结果
利用列表存储二维数据
代码如下
import requests
from bs4 import BeautifulSoup# 引入解析模块BS4
import bs4
#自定义函数,从网络上获取大学排名网页内容
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()#判断状态码是否为200,产生异常信息r.encoding = r.apparent_encoding#调整合适的编码信息return r.text#返回已爬取网页内容except:return ""#状态码异常不爬取
#自定义函数,提取网页内容信息到合适的数据结构(列表)
def fillUnivList(ulist, html):soup = BeautifulSoup(html, "html.parser")#采用html解析器for tr in soup.find('tbody').children:#找到所有tbody标签信息获取所有大学相关信息,利用bs4库的children遍历if isinstance(tr, bs4.element.Tag):#在tbody标签中找到tr标签获取每一个大学的信息tds = tr('td')#在tr标签中利用列表存储每个td标签的相关字段ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string])
#利用数据结构展示并输出
def printUnivList(ulist, num):provinces = input("请输入你要爬取的大学排名的省份:")tplt = "{0:^4}\t{1:{4}^12}\t{2:^8}\t{3:^6}"#输出模版print(tplt.format("排名","学校名称","省市","总分",chr(12288)))#采用中文空格填充for i in range(num):u=ulist[i]if u[2] == provinces:#只输出对应省份的学校print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))def main():uinfo = []url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'html = getHTMLText(url)fillUnivList(uinfo, html)printUnivList(uinfo, 549) # 最多549 univs
main()
实现效果