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. MySQL45讲笔记-事务隔离级别,为什么你改了数据我看不见

    简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败.在MySQL中,事务至此是在引擎层实现的,但并不是所有的MySQL引擎都支持事务,这也是MyISAM被InnoDB取代的原因之一. ...

  2. Selenium WebDriver 定位之Xpath定位

    Selenium 定位之Xpath定位: 1.绝对路径定位:以/开头从根节点一直找到当前节点,不推荐使用决定路径定位方式 2.相对路径定位:使用"//"表示相对路径定位,格式:// ...

  3. python常见题型

    语言特性 1. 谈谈对 Python 和其他语言的区别 2. 简述解释型和编译型编程语言 3. Python 的解释器种类以及相关特点? 4. Python3 和 Python2 的区别? 5. Py ...

  4. linux之平均负载(学习笔记非原创)

    什么是平均负载 [root@111 ~]# uptime 11:03:33 up 149 days, 17:34, 1 user, load average: 0.08, 0.05, 0.01 最后三 ...

  5. 2021年正确的Android逆向开发学习之路

    2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...

  6. 大文件上传FTP

    需求 将本地大文件通过浏览器上传到FTP服务器. 原有方法 将本地文件整个上传到浏览器,然后发送到node服务器,最后由node发送到FTP服务器. 存在问题 浏览器缓存有限且上传速率受网速影响,当文 ...

  7. C# 关机/重启/注销计算机

    一.调用 shutdown.exe 执行操作 调用 shutdown.exe 执行计算机关机.重启.注销操作,还可以设置多长时间后执行操作,代码如下: 1 /// <summary> 2 ...

  8. 爬虫学习(三)Chrome浏览器使用

    一.新建隐身窗口 在打开隐身窗口的时候,第一次请求某个网站是没有携带cookie的,和代码请求一个网站一样,不携带cookie.这样就能够尽可能的理解代码请求某个网站的结果:除非数据是通过js加载出来 ...

  9. Java异常处理场景中不同位置的返回值详细解析

    Java 异常处理中的返回值在不同位置不同场景下是有一些差别的,这里需要格外注意 具体分以下两种场景: 1 finally语句块没有return语句,即当代码执行到try或者catch语句块中的ret ...

  10. Flask之静态文件处理

    静态文件的处理 推荐 from flask import Flask,render_template app = Flask(__name__,template_folder='templates', ...