介绍
本文是中国大学MOOC上的Python网络爬虫与信息提取 课程中的笔记,是五个基本的爬虫操作,个人觉得其中的方法比较常用,因此记录下来了。
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("爬取失败")
运行结果:
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<!-- shouji -->
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>【华为荣耀8】荣耀8 4GB+64GB 全网通4G手机 魅海蓝【行情 报价 价格 评测】-京东</title>
<meta name="keywords" content="HUAWEI荣耀8,华为荣耀8,华为荣耀8报价,HUAWEI荣耀8报价"/>
<meta name="description" content="【华为荣耀8】京东JD.COM提供华为荣耀8正品行货,并包括HUAWEI荣耀8网购指南,以及华为荣耀8图片
、荣耀8参数、荣耀8评论、荣耀8心得、荣耀8技巧等信息,网购华为荣耀8上京东,放心又轻松" />
<meta name="format-detection" content="telephone=no">
<meta http-equiv="mobile-agent" content="format=xhtml; url=//item.m.jd.com/product/2967929.html">
<meta http-equiv="mobile-agent" content="format=html5; url=//item.m.jd.com/product/2967929.html">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<link rel="canonical" href="//item.jd.com/2967929.html"/>
<link rel="dns-prefetch" href="//misc.360buyimg.com"/>
<link rel="dns-prefetch" href="//static.360buyimg.com"/>
<link rel="dns-prefetch" href="//img10.360buyimg.com"/>
<link rel="dns
2. 亚马逊商品页面的爬取
课程中的链接貌似失效了,因此换了个商品链接,代码如下:
import requests
url = "https://www.amazon.cn/gp/product/B07GCKM8XN/ref=s9_acss_bw_cg__1b1_w?pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-3&pf_rd_r=Q96W7FJWVCD98PY5RRYN&pf_rd_t=101&pf_rd_p=6f1a9153-ec04-48ac-874b-4069a47b59c5&pf_rd_i=1976614071"
try :
headers = {
'User-Agent':'Mozilla/5.0'
}
r = requests.get(url, headers=headers)
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 = 'M99KXYNJ4HQ9HHPTW6RZ';
}
</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">
3. 百度/360搜索关键字提交
可以通过 params 传递参数,例如,获取搜索 Python 的网页。
百度搜索代码:
import requests
keyword = "Python"
url = "http://www.baidu.com/s"
try :
kv = {
'wd':keyword
}
r = requests.get(url, params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except :
print("爬取失败")
结果:
360 搜索代码:
import requests
keyword = "Python"
url = "http://www.so.com/s"
try :
kv = {
'q':keyword
}
r = requests.get(url, params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except :
print("爬取失败")
结果:
4. 网络图片的爬取和存储
这里我换了一个图片的网址,找了一张美女图片的链接,同样,将路径改了一下,使用课程中的不太合适,这里直接保存在当前项目的路径下了,并且固定了文件名称。
代码:
import requests
import os
url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1547834983276&di=99c15aaa5793311a798688c787bd69a2&imgtype=0&src=http%3A%2F%2Fimg05.tooopen.com%2Fimages%2F20150515%2Ftooopen_sy_124474458663.jpg"
root = ".//"
path = root + "beauty.jpg"
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("爬取失败")
结果:
文件保存成功
5. IP地址归属地的自动查询
虽然我们可以直接在网址 http://m.ip138.com/ 上查询 IP 地址,但在代码中还是很困难的。但也是可以实现的。
这里的实现方法与第三个(在百度和360中搜索)是一样的,都是在 url 后面增加参数。这里增加的参数就是 ip=xxx,代码如下:
import requests
url = "http://m.ip138.com/ip.asp?ip="
try :
r = requests.get(url+'219.217.224.0')
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-500:])
except :
print("爬取失败")
结果:
询" class="form-btn" />
</form>
</div>
<div class="query-hd">ip138.com IP查询(搜索IP地址的地理位置)</div>
<h1 class="query">您查询的IP:219.217.224.0</h1><p class="result">本站主数据:黑龙江省哈尔滨市 哈
尔滨工业大学 教育网</p><p class="result">参考数据一:黑龙江省哈尔滨市 哈尔滨工业大学</p>
</div>
</div>
<div class="footer">
<a href="http://www.miitbeian.gov.cn/" rel="nofollow" target="_blank">沪ICP备10013467号-1</a>
</div>
</div>
<script type="text/javascript" src="/script/common.js"></script></body>
</html>
可以看到,这是哈尔滨工业大学的 IP 地址。