Python爬虫笔记一(来自MOOC) Requests库入门
Python爬虫笔记一(来自MOOC)
提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行。
课程为:北京理工大学-嵩天-Python爬虫与信息提取
提示:多多自我发挥更有助于学习语言逻辑哦!
@
前言
通用代码框架:
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeput=30)
r.raise_for_status()#如果状态不是200,引发HTTPError异常
r.encoding=r.apparemt_encoding
return r.text
except:
return "产生异常"
if __name__=="__main__":
url="http://www.baidu.com"
print(getHTMLText(url))
例子都是这一周的内容的
提示:以下是代码和运行结果
一、嵩天老师课件给出的代码部分
1.京东商品页面的爬取
代码如下:
import requests
url="https://item.jd.com/2967929.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print ("爬取失败")
运行结果:
<script>window.location.href='https://passport.jd.com/new/login.aspx?ReturnUrl=http%3A%2F%2Fitem.jd.com%2F2967929.html'</script> 进程已结束,退出代码0
2.亚马逊商品页面的爬取
代码如下:
import requests
url="https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
kv={'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1000:2000])
except:
print("爬取失败")
运行结果:
ue_sid = (document.cookie.match(/session-id=([0-9-]+)/) || [])[1],
ue_sn = "opfcaptcha.amazon.cn",
ue_id = 'FNY2VQ38P3R6JETHXGX2';
}
</script>
</head>
<body>
<!--
To discuss automated access to Amazon data please contact api-services-support@amazon.com.
For information about migrating to our APIs refer to our Marketplace APIs at https://developer.amazonservices.com.cn/index.html/ref=rm_c_sv, or our Product Advertising API at https://associates.amazon.cn/gp/advertising/api/detail/main.html/ref=rm_c_ac for advertising use cases.
-->
<!--
Correios.DoNotSend
-->
<div class="a-container a-padding-double-large" style="min-width:350px;padding:44px 0 !important">
<div class="a-row a-spacing-double-large" style="width: 350px; margin: 0 auto">
<div class="a-row a-spacing-medium a-text-center"><i class="a-icon a-logo"></i></div>
<div class="a-box a-alert a-alert-info a-spacing-base">
<div class="a-box-inner">
进程已结束,退出代码0
3.百度/360关键字提交
百度代码如下:
import requests
keyword="Python"
try:
kv = {'wd':keyword}
r = requests.get("http://www.baidu.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except :
print("爬取失败")
运行结果
http://www.baidu.com/s?wd=Python
660082
进程已结束,退出代码0
360代码如下:
import requests
keyword="Python"
try:
kv={'q':keyword}
r=requests.get("http://www.so.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失败")
运行结果
https://www.so.com/s?q=Python
327996
进程已结束,退出代码0
4.网络图片的爬取与储存
代码如下:
import requests
import os
url="https://imgsa.baidu.com/forum/w%3D580/sign=dc59751a6181800a6ee58906813433d6/5c40b4003af33a87e4518c8fcb5c10385243b5e4.jpg"
root="C://Users//灰二//Pictures//Saved Pictures//"
path=root+url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r=requests.get(url)
with open(path,'wb')as f:
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
运行结果:
文件保存成功
进程已结束,退出代码0
5.ip归属地的自动查询
代码如下:
import requests
url="http://m.ip138.com/ip.asp?ip="
try:
r=requests.get(url+'202.204.80.112')
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text[-500:])
except:
print("爬取失败")
运行结果:
爬取失败
进程已结束,退出代码0
二、个人运行过程中的一些问题和尝试的方法
1.ip归属地自动查询
这个代码的问题我觉得不是代码问题,但是在运行会反馈回来爬取失败的信息,所以程序的运行是没有问题的,就是状态非200,我觉得问题应该是出现在了这里,giao。
2.其他网页的一些爬取过程
我发现有的网页也会出现一些不是我上面所给出的结果,大部分我看了都是要登录账号,所以可能是因为这个原因吧(瞎猜),如果有解决办法也想各位大哥给出建议。
小练习题
也是教学的评论区里的题目
爬取访问一个网页100次,统计耗时
大部分代码也都是相似的,所以我的也是抄抄改改得到的,不过我发现一个很有趣的现象,先上代码,代码如下:
import requests
import time
def getHtmlText(url):
try:
r = requests.get(url, timeout=30)#获取url的内容,设定超时时间为30秒
r.raise_for_status()#如果不是200,产生异常requests.HTTPError
# r.raise_for_status()
# 在方法内部判断r.status_code是否等于200,不需要
# 增加额外的if语句,该语句便于利用try‐except进行异常处理
r.encoding = r.apparent_encoding #从HTTP header中猜测的响应内容编码方式
return r.text#返回html响应内容的字符串形式,即是url对应的页面内容
except:
return '运行异常'
if __name__ == "__main__":
url = 'https://www.tudou.com' # 任意填入某个网址即可,我爬的土豆
totaltime = 0
for i in range(100):
starttime = time.perf_counter()
getHtmlText(url)
endtime = time.perf_counter()
print('第{0}次爬取用时{1:.4f}秒;'.format(i + 1, endtime - starttime))
totaltime = totaltime + endtime - starttime
print('总共用时{:.4f}秒'.format(totaltime))
第一次运行结果:
C:\Users\灰二\AppData\Local\Programs\Python\Python39\python.exe C:/Users/灰二/PycharmProjects/Spider/spider1.py
第1次爬取用时0.8227秒;
第2次爬取用时0.7693秒;
第3次爬取用时0.7562秒;
第4次爬取用时0.7901秒;
第5次爬取用时0.1493秒;
第6次爬取用时0.1525秒;
第7次爬取用时0.1509秒;
第8次爬取用时0.1475秒;
第9次爬取用时0.1459秒;
第10次爬取用时0.1505秒;
第11次爬取用时0.1519秒;
第12次爬取用时0.1520秒;
第13次爬取用时0.1479秒;
第14次爬取用时0.1407秒;
第15次爬取用时0.1476秒;
第16次爬取用时0.1528秒;
第17次爬取用时0.1507秒;
第18次爬取用时0.1508秒;
第19次爬取用时0.1563秒;
第20次爬取用时0.1515秒;
第21次爬取用时0.1475秒;
第22次爬取用时0.1574秒;
第23次爬取用时0.1467秒;
第24次爬取用时0.1551秒;
第25次爬取用时0.1580秒;
第26次爬取用时0.1489秒;
第27次爬取用时0.1469秒;
第28次爬取用时0.1578秒;
第29次爬取用时0.1576秒;
第30次爬取用时0.1541秒;
第31次爬取用时0.1482秒;
第32次爬取用时0.1489秒;
第33次爬取用时0.1493秒;
第34次爬取用时0.1560秒;
第35次爬取用时0.1531秒;
第36次爬取用时0.1519秒;
第37次爬取用时0.1480秒;
第38次爬取用时0.1476秒;
第39次爬取用时0.1481秒;
第40次爬取用时0.1491秒;
第41次爬取用时0.1460秒;
第42次爬取用时0.1420秒;
第43次爬取用时0.1724秒;
第44次爬取用时0.1520秒;
第45次爬取用时0.1509秒;
第46次爬取用时0.1536秒;
第47次爬取用时0.1484秒;
第48次爬取用时0.1499秒;
第49次爬取用时0.1478秒;
第50次爬取用时0.1471秒;
第51次爬取用时0.1593秒;
第52次爬取用时0.1560秒;
第53次爬取用时0.1606秒;
第54次爬取用时0.1516秒;
第55次爬取用时0.1518秒;
第56次爬取用时0.1562秒;
第57次爬取用时0.1541秒;
第58次爬取用时0.1452秒;
第59次爬取用时0.1510秒;
第60次爬取用时0.1504秒;
第61次爬取用时0.1475秒;
第62次爬取用时0.1588秒;
第63次爬取用时0.1615秒;
第64次爬取用时0.1512秒;
第65次爬取用时0.1497秒;
第66次爬取用时0.1524秒;
第67次爬取用时0.1565秒;
第68次爬取用时0.1565秒;
第69次爬取用时0.1765秒;
第70次爬取用时0.1601秒;
第71次爬取用时0.1574秒;
第72次爬取用时0.1463秒;
第73次爬取用时0.1488秒;
第74次爬取用时0.1771秒;
第75次爬取用时0.1589秒;
第76次爬取用时0.1582秒;
第77次爬取用时0.1474秒;
第78次爬取用时0.1692秒;
第79次爬取用时0.1542秒;
第80次爬取用时0.1560秒;
第81次爬取用时0.1439秒;
第82次爬取用时0.1464秒;
第83次爬取用时0.1505秒;
第84次爬取用时0.1574秒;
第85次爬取用时0.1706秒;
第86次爬取用时0.1520秒;
第87次爬取用时0.1603秒;
第88次爬取用时0.1629秒;
第89次爬取用时0.1483秒;
第90次爬取用时0.1504秒;
第91次爬取用时0.1560秒;
第92次爬取用时0.1702秒;
第93次爬取用时0.1525秒;
第94次爬取用时0.1501秒;
第95次爬取用时0.1587秒;
第96次爬取用时0.1555秒;
第97次爬取用时0.1535秒;
第98次爬取用时0.1521秒;
第99次爬取用时0.1463秒;
第100次爬取用时0.1486秒;
总共用时17.8437秒
进程已结束,退出代码0
第二次运行结果:
C:\Users\灰二\AppData\Local\Programs\Python\Python39\python.exe C:/Users/灰二/PycharmProjects/Spider/spider1.py
第1次爬取用时0.2139秒;
第2次爬取用时0.1623秒;
第3次爬取用时0.1626秒;
第4次爬取用时0.1517秒;
第5次爬取用时0.1464秒;
第6次爬取用时0.1650秒;
第7次爬取用时0.1583秒;
第8次爬取用时0.1636秒;
第9次爬取用时0.1567秒;
第10次爬取用时0.1541秒;
第11次爬取用时0.1458秒;
第12次爬取用时0.1575秒;
第13次爬取用时0.1507秒;
第14次爬取用时0.1615秒;
第15次爬取用时0.1579秒;
第16次爬取用时0.1538秒;
第17次爬取用时0.1548秒;
第18次爬取用时0.1672秒;
第19次爬取用时0.1584秒;
第20次爬取用时0.1739秒;
第21次爬取用时0.1481秒;
第22次爬取用时0.1510秒;
第23次爬取用时0.1552秒;
第24次爬取用时0.1521秒;
第25次爬取用时0.1567秒;
第26次爬取用时0.1539秒;
第27次爬取用时0.1452秒;
第28次爬取用时0.1547秒;
第29次爬取用时0.1510秒;
第30次爬取用时0.1476秒;
第31次爬取用时0.1540秒;
第32次爬取用时0.1586秒;
第33次爬取用时0.1588秒;
第34次爬取用时0.1574秒;
第35次爬取用时0.1663秒;
第36次爬取用时0.1593秒;
第37次爬取用时0.1474秒;
第38次爬取用时0.1612秒;
第39次爬取用时0.1568秒;
第40次爬取用时0.1677秒;
第41次爬取用时0.1660秒;
第42次爬取用时0.1542秒;
第43次爬取用时0.1844秒;
第44次爬取用时0.1568秒;
第45次爬取用时0.1601秒;
第46次爬取用时0.1524秒;
第47次爬取用时0.1578秒;
第48次爬取用时0.1521秒;
第49次爬取用时0.1598秒;
第50次爬取用时0.1508秒;
第51次爬取用时0.1464秒;
第52次爬取用时0.1452秒;
第53次爬取用时0.1617秒;
第54次爬取用时0.1652秒;
第55次爬取用时0.1500秒;
第56次爬取用时0.1532秒;
第57次爬取用时0.1473秒;
第58次爬取用时0.1525秒;
第59次爬取用时0.1594秒;
第60次爬取用时0.1496秒;
第61次爬取用时0.1482秒;
第62次爬取用时0.1484秒;
第63次爬取用时0.3039秒;
第64次爬取用时0.1562秒;
第65次爬取用时0.1579秒;
第66次爬取用时0.1717秒;
第67次爬取用时0.1652秒;
第68次爬取用时0.1505秒;
第69次爬取用时0.1652秒;
第70次爬取用时0.1548秒;
第71次爬取用时0.1624秒;
第72次爬取用时0.1704秒;
第73次爬取用时0.1552秒;
第74次爬取用时0.1550秒;
第75次爬取用时0.1539秒;
第76次爬取用时0.1476秒;
第77次爬取用时0.1586秒;
第78次爬取用时0.1500秒;
第79次爬取用时0.1553秒;
第80次爬取用时0.1504秒;
第81次爬取用时0.1666秒;
第82次爬取用时0.1464秒;
第83次爬取用时0.1562秒;
第84次爬取用时0.1534秒;
第85次爬取用时0.1571秒;
第86次爬取用时0.1542秒;
第87次爬取用时0.1549秒;
第88次爬取用时0.1472秒;
第89次爬取用时0.1523秒;
第90次爬取用时0.1807秒;
第91次爬取用时0.1606秒;
第92次爬取用时0.1585秒;
第93次爬取用时0.1551秒;
第94次爬取用时0.1577秒;
第95次爬取用时0.1603秒;
第96次爬取用时0.1542秒;
第97次爬取用时0.1575秒;
第98次爬取用时0.1590秒;
第99次爬取用时0.1623秒;
第100次爬取用时0.1639秒;
总共用时15.8824秒
进程已结束,退出代码0
可能没怎么明白我所说的有趣在哪,第一次爬取的前四次时长相比较与其他的次数所花费的时间比较多
第1次爬取用时0.8227秒;
第2次爬取用时0.7693秒;
第3次爬取用时0.7562秒;
第4次爬取用时0.7901秒;
第5次爬取用时0.1493秒;
但是第二次的时候不会有这种情况。
第1次爬取用时0.2139秒;
第2次爬取用时0.1623秒;
第3次爬取用时0.1626秒;
第4次爬取用时0.1517秒;
第5次爬取用时0.1464秒;
所以我就比较好奇了。百度了一下没有什么有参考性的答案(也只是随便搜了一下),如果有大哥知晓可以告知一下小弟就再好不过了。
Python爬虫笔记一(来自MOOC) Requests库入门的更多相关文章
- [Python爬虫笔记][随意找个博客入门(一)]
[Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...
- Python爬虫:HTTP协议、Requests库(爬虫学习第一天)
HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...
- Python爬虫(二):Requests库
所谓爬虫就是模拟客户端发送网络请求,获取网络响应,并按照一定的规则解析获取的数据并保存的程序.要说 Python 的爬虫必然绕不过 Requests 库. 1 简介 对于 Requests 库,官方文 ...
- Python爬虫学习==>第八章:Requests库详解
学习目的: request库比urllib库使用更加简洁,且更方便. 正式步骤 Step1:什么是requests requests是用Python语言编写,基于urllib,采用Apache2 Li ...
- python爬虫---从零开始(三)Requests库
1,什么是Requests库 Requests是用python语言编写,基于urllib,采用Apache2 Licensed 开源协议的HTTP库. 它比urllib更加方便,可以节约我们大量的工作 ...
- Python爬虫:HTTP协议、Requests库
HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...
- Python爬虫基础(四)Requests库的使用
requests文档 首先需要安装:pip install requests get请求 最基本的get: # -*- coding: utf-8 -*-import requests respons ...
- 小白学 Python 爬虫(21):解析库 Beautiful Soup(上)
小白学 Python 爬虫(21):解析库 Beautiful Soup(上) 人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前 ...
- python爬虫笔记Day01
python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...
随机推荐
- Go语言快速安装手册
Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ia ...
- 比较Power BI和Tableau,好比用奔驰对比奥迪
经常会有人问Power BI和Tableau的区别,好吧,为了非IT专业的能看懂,咱们就用车,奔驰和奥迪来对比一下.因为他们确实有太多相似之处. 所以Power BI VS Tableau,就相当于国 ...
- Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace
现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...
- Desired_Capabilities配置
appium服务器初始化参数 最全: https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps. ...
- 【Linux】ssh远程连接到指定ip的指定用户上
通过ssh可以远程连接到其他的机器上,但是如果只想连接到指定的用户的话 需要这样做: -l 选项 (是L不是I,小写) ssh IP -l 用户名 这里的ip如果在hosts下就可以直接输入域名或者主 ...
- kubernets之job资源
一 介绍job资源 1.1 前面介绍的RC,RS,DS等等,管控的pod都是需要长期持久的运行的应用,但是尝试考虑另外一种场景,在微服务的场景下,有些pod的作用就是需要 执行完一些命令之后正常 ...
- URL重定向 - Pikachu
概述: 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能 ...
- [分享] 最流行的 10 个 JavaScript 库
1. Lodash https://github.com/lodash/lodash 一个工具库,用得还蛮多. 2. Chalk https://github.com/chalk/chalk 给终端加 ...
- linux下安装zsh和p10k的详细过程
目录 下载zsh 下载oh-my-zsh 切换shell 下载p10k 下载zsh sudo apt-get install zsh sudo apt-get install git 下载oh-my- ...
- std::thread线程库详解(3)
目录 目录 前言 lock_guard scoped_lock (C++17) unique_lock shared_lock 总结 ref 前言 前两篇的博文分别介绍了标准库里面的线程和锁,这一次的 ...