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库入门的更多相关文章

  1. [Python爬虫笔记][随意找个博客入门(一)]

    [Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...

  2. Python爬虫:HTTP协议、Requests库(爬虫学习第一天)

    HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...

  3. Python爬虫(二):Requests库

    所谓爬虫就是模拟客户端发送网络请求,获取网络响应,并按照一定的规则解析获取的数据并保存的程序.要说 Python 的爬虫必然绕不过 Requests 库. 1 简介 对于 Requests 库,官方文 ...

  4. Python爬虫学习==>第八章:Requests库详解

    学习目的: request库比urllib库使用更加简洁,且更方便. 正式步骤 Step1:什么是requests requests是用Python语言编写,基于urllib,采用Apache2 Li ...

  5. python爬虫---从零开始(三)Requests库

    1,什么是Requests库 Requests是用python语言编写,基于urllib,采用Apache2 Licensed 开源协议的HTTP库. 它比urllib更加方便,可以节约我们大量的工作 ...

  6. Python爬虫:HTTP协议、Requests库

    HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...

  7. Python爬虫基础(四)Requests库的使用

    requests文档 首先需要安装:pip install requests get请求 最基本的get: # -*- coding: utf-8 -*-import requests respons ...

  8. 小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

    小白学 Python 爬虫(21):解析库 Beautiful Soup(上) 人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前 ...

  9. python爬虫笔记Day01

    python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...

随机推荐

  1. 在微信小程序开发中使用Typescript

    Typescript的优势咱不需要赘述太多,有兴趣可以参考(https://www.typescriptlang.org/).今天给大家分享一下如何在微信小程序(或者其他同类小程序)开发中使用Type ...

  2. Head First 设计模式 —— 09. 模版方法 (Template Method) 模式

    模板方法模式 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. P289 特点 主导算法框架,并且保护这个算法 P28 ...

  3. 常见大中型网络WLAN基本业务实例

    组网图形 大中型WLAN网络简介 本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网,相对于有线网络的铺设成本高,不便于网络调整和扩展.位置固定,移动性差等缺 ...

  4. HP Proliant DL580 gen9 阵列卡P440AR 高速缓存 被禁用

    摘录内容: IMPORTANT: This issue does NOT occur when the operating system shuts down gracefully. In addit ...

  5. Python在项目外更改项目内引用

    前言 目前有一个奇葩的需求, 将某个开源项目整合进自己的项目里去调度, 还需要在每次启动这个开源项目时, 加载不同的配置文件进去, 问题是配置文件并不是一个 conf 或者是其他的什么, 而是以 .p ...

  6. LeetCode24 两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...

  7. 单元测试:单元测试中的mock

    公司要求提升单元测试的质量,提高代码的分支覆盖率和行覆盖率,安排我研究单元测试,指定方案分享并在开发部普及开.整理完资料后,同步一下到博客. 单元测试中的mock的目的 mock的主要目的是让单元测试 ...

  8. 负载均衡和故障转换(Failover)的连接RAC方法

    TAF:Transparent Application Failover,透明的应用切换,即在切换的过程中,用户感知不到.可以实现会话的切换(无法实现事务的切换,即没有提交的事务会回滚),即在不断开连 ...

  9. [usaco2008 Oct]Pasture Walking 牧场旅行

    题目描述 n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草.更加自然而方便的是,第i个奶牛就在第i个牧场中吃草. 其中的一些对牧场被总共 ...

  10. nodejs内网穿透

    说明 本地服务注册,基于子域名->端口映射.公网测试请开启二级或三级域名泛解析 无心跳保活.无多线程并发处理 服务器端 请求ID基于全局变量,不支持PM2多进程开服务端.(多开请修改uid函数, ...