本文介绍一些入门的实践项目,非常简单的几个例子。
继上之前有关爬虫基础及Requests库介绍以及网络爬虫的问题和行为规范介绍后,今天开始进行三个实践小项目。
实例1:京东商品页面爬取
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import requests def getHTMLText(url, hd): try: r = requests.get(url, headers = hd) r.raise_for_status() r.encoding = r.apparent_encoding return r.text[:1000] except: return "产生异常"
if __name__ == "__main__": url = "https://item.jd.com/4406761.html" hd = {'user-agent':'Mozilla/5.0'} print(getHTMLText(url, hd))
|
注意,如果不指定headers字段,那么是爬不到结果的,这是因为当我们直接用requests库爬取时,会告知网页我们使用的是requests库,利用r.requests.headers
可以看到user-agent
字段的内容是'python-requests/版本号'
。
由于有些网站不允许爬虫,于是对其进行了限制。不过为了爬取,我们可以采取指定user-agent
字段为一个伪装的浏览器。这就是上面hd那一行代码的由来。这样我们爬取的时候网页会以为我们是一个浏览器访问的。
实例2: 搜索引擎关键词提交
百度的关键词接口:
http://www.baidu.com/s?wd=keyword
360的关键词接口:
http://www.so.com/s?q=keyword
只要构造这样的url就可以完成关键字提交。可以利用params可以向url中增加内容。下面以360搜索为例(百度搜索根据现有知识无法做到爬取网页,必须要验证,360目前还ok)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import requests def getHTMLText(url, hd, kv): try: r = requests.get(url, headers = hd, params = kv) print(r.request.url) r.raise_for_status() print(len(r.text)) except: print('爬取异常')
if __name__ == "__main__": hd = {'user-agent':'Mozilla/5.0'} kv = {'q':'Python'} url = 'https://www.so.com/s' getHTMLText(url, hd, kv)
|
返回的输出结果为:
>>> https://www.so.com/s?q=Python
>>> 319088
实例3: 网络图片的爬取
爬取的图片来自中国国家地理网站。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import requests import os
if __name__ == "__main__": url = 'http://img0.dili360.com/ga/M00/48/CB/wKgBzFmeOaWAAg7SAAMP0b_hOVw041.tub.jpg' root = './' 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('读取失败')
|
经过三个小实例的学习,其实爬虫主要就是解析网站,然后爬取相应的内容。
感谢北京理工大学老师的课程,虽然课程可能有些旧,好多网页根据课程教的已经不好爬到东西了,但是感觉真的是很清晰明了了。
接下来似乎就可以进阶了,希望自己能在7月到来前把基础学个差不多,最近感觉有点心急,想学的东西太多,心急吃不了热豆腐,慢慢积累不断丰富自己吧。
加油:)