本文介绍一些入门的实践项目,非常简单的几个例子。
继上之前有关爬虫基础及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月到来前把基础学个差不多,最近感觉有点心急,想学的东西太多,心急吃不了热豆腐,慢慢积累不断丰富自己吧。
加油:)