1.注册中国大学MOOC

2.选择北京理工大学嵩天老师的《Python网络爬虫与信息提取》MOOC课程

3.学习完成第0周至第4周的课程内容,并完成各周作业

第一周

Requests库的爬取性能分析

  1. import requests
  2. import time
  3. def getHTMLText(url):
  4. try:
  5. r = requests.get(url,timeout=30)
  6. r.raise_for_status()
  7. r.encoding = r.apparent_encoding
  8. return r.text
  9. except:
  10. return "产生异常"
  11.  
  12. start = time.perf_counter()
  13. for i in range(100):
  14. getHTMLText("https://www.baidu.com")
  15. end = time.perf_counter()
  16. print("抓取100次百度首页内容所用时间:{:.2f}秒".format(end-start))

  

第二周

中国大学排名定向爬虫

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import bs4
  4.  
  5. def getHTMLText(url):
  6. try:
  7. r = requests.get(url, timeout=30)
  8. r.raise_for_status()
  9. r.encoding = r.apparent_encoding
  10. return r.text
  11. except:
  12. return ""
  13.  
  14. def fillUnivList(ulist, html):
  15. soup = BeautifulSoup(html, "html.parser")
  16. for tr in soup.find('tbody').children:
  17. if isinstance(tr, bs4.element.Tag):
  18. tds = tr('td')
  19. ulist.append([tds[0].string, tds[1].string, tds[3].string])
  20.  
  21. def printUnivList(ulist, num):
  22. tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
  23. print(tplt.format("排名","学校名称","总分",chr(12288)))
  24. for i in range(num):
  25. u=ulist[i]
  26. print(tplt.format(u[0],u[1],u[2],chr(12288)))
  27.  
  28. def main():
  29. uinfo = []
  30. url = 'https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
  31. html = getHTMLText(url)
  32. fillUnivList(uinfo, html)
  33. printUnivList(uinfo, 20) # 20 univs
  34. main()

  

第三周

淘宝商品比价定向爬虫

  1. import requests
  2. import re
  3.  
  4. def getHTMLText(url):
  5. try:
  6. r = requests.get(url, timeout=30)
  7. r.raise_for_status()
  8. r.encoding = r.apparent_encoding
  9. return r.text
  10. except:
  11. return ""
  12.  
  13. def parsePage(ilt, html):
  14. try:
  15. plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
  16. tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
  17. for i in range(len(plt)):
  18. price = eval(plt[i].split(':')[1])
  19. title = eval(tlt[i].split(':')[1])
  20. ilt.append([price , title])
  21. except:
  22. print("")
  23.  
  24. def printGoodsList(ilt):
  25. tplt = "{:4}\t{:8}\t{:16}"
  26. print(tplt.format("序号", "价格", "商品名称"))
  27. count = 0
  28. for g in ilt:
  29. count = count + 1
  30. print(tplt.format(count, g[0], g[1]))
  31.  
  32. def main():
  33. goods = '书包'
  34. depth = 3
  35. start_url = 'https://s.taobao.com/search?q=' + goods
  36. infoList = []
  37. for i in range(depth):
  38. try:
  39. url = start_url + '&s=' + str(44*i)
  40. html = getHTMLText(url)
  41. parsePage(infoList, html)
  42. except:
  43. continue
  44. printGoodsList(infoList)
  45.  
  46. main()

  

股票数据定向爬虫

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import traceback
  4. import re
  5.  
  6. def getHTMLText(url, code="utf-8"):
  7. try:
  8. r = requests.get(url)
  9. r.raise_for_status()
  10. r.encoding = code
  11. return r.text
  12. except:
  13. return ""
  14.  
  15. def getStockList(lst, stockURL):
  16. html = getHTMLText(stockURL, "GB2312")
  17. soup = BeautifulSoup(html, 'html.parser')
  18. a = soup.find_all('a')
  19. for i in a:
  20. try:
  21. href = i.attrs['href']
  22. lst.append(re.findall(r"[s][hz]\d{6}", href)[0])
  23. except:
  24. continue
  25.  
  26. def getStockInfo(lst, stockURL, fpath):
  27. count = 0
  28. for stock in lst:
  29. url = stockURL + stock + ".html"
  30. html = getHTMLText(url)
  31. try:
  32. if html=="":
  33. continue
  34. infoDict = {}
  35. soup = BeautifulSoup(html, 'html.parser')
  36. stockInfo = soup.find('div',attrs={'class':'stock-bets'})
  37.  
  38. name = stockInfo.find_all(attrs={'class':'bets-name'})[0]
  39. infoDict.update({'股票名称': name.text.split()[0]})
  40.  
  41. keyList = stockInfo.find_all('dt')
  42. valueList = stockInfo.find_all('dd')
  43. for i in range(len(keyList)):
  44. key = keyList[i].text
  45. val = valueList[i].text
  46. infoDict[key] = val
  47.  
  48. with open(fpath, 'a', encoding='utf-8') as f:
  49. f.write( str(infoDict) + '\n' )
  50. count = count + 1
  51. print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="")
  52. except:
  53. count = count + 1
  54. print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="")
  55. continue
  56.  
  57. def main():
  58. stock_list_url = 'https://quote.eastmoney.com/stocklist.html'
  59. stock_info_url = 'https://gupiao.baidu.com/stock/'
  60. output_file = 'D:/BaiduStockInfo.txt'
  61. slist=[]
  62. getStockList(slist, stock_list_url)
  63. getStockInfo(slist, stock_info_url, output_file)
  64.  
  65. main()

  

第四周

股票数据Scrapy爬虫

  1. import scrapy
  2. import re
  3.  
  4. class StocksSpider(scrapy.Spider):
  5. name = "stocks"
  6. start_urls = ['https://quote.eastmoney.com/stocklist.html']
  7.  
  8. def parse(self, response):
  9. for href in response.css('a::attr(href)').extract():
  10. try:
  11. stock = re.findall(r"[s][hz]\d{6}", href)[0]
  12. url = 'https://gupiao.baidu.com/stock/' + stock + '.html'
  13. yield scrapy.Request(url, callback=self.parse_stock)
  14. except:
  15. continue
  16.  
  17. def parse_stock(self, response):
  18. infoDict = {}
  19. stockInfo = response.css('.stock-bets')
  20. name = stockInfo.css('.bets-name').extract()[0]
  21. keyList = stockInfo.css('dt').extract()
  22. valueList = stockInfo.css('dd').extract()
  23. for i in range(len(keyList)):
  24. key = re.findall(r'>.*</dt>', keyList[i])[0][1:-5]
  25. try:
  26. val = re.findall(r'\d+\.?.*</dd>', valueList[i])[0][0:-5]
  27. except:
  28. val = '--'
  29. infoDict[key]=val
  30.  
  31. infoDict.update(
  32. {'股票名称': re.findall('\s.*\(',name)[0].split()[0] + \
  33. re.findall('\>.*\<', name)[0][1:-1]})
  34. yield infoDict

  

4.提供图片或网站显示的学习进度,证明学习的过程。

5.写一篇不少于1000字的学习笔记,谈一下学习的体会和收获。

经过这段时间的学习,我对爬虫有了一定的了解,爬虫就是一个程序,这个程序的目的就是为了抓取万维网信息资源,比如你日常百度、谷歌等搜索引擎,搜索结果就全都依赖来定时获取。通过学习我知道了Python 爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序。学习网络爬虫主要分成抓取,分析,存储三大板块。抓取即当我们在浏览器中输入一个url后回车,会发生以下步骤:一为查找域名对应的IP地址。二为向IP对应的服务器发送请求。三为服务器响应请求,发回网页内容。四是浏览器解析网页内容。网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。分析就是抓取之后就是对抓取的内容进行分析,你需要什么内容,就从中提炼出相关的内容来。常见的分析工具有正则表达式,BeautifulSoup,lxml等等。分析出我们需要的内容之后,接下来就是存储了。我们可以选择存入文本文件,也可以选择存入。这次课程我还学习了Python第三方库Requests,讲解通过HTTP/HTTPS协议自动从互联网获取数据并向其提交请求的方法;Python第三方库Beautiful Soup,讲解从所爬取HTML页面中解析完整Web信息的方法;Python标准库Re,讲解从所爬取HTML页面中提取关键信息的方法;Python第三方库Scrapy,介绍通过网络爬虫框架构造专业网络爬虫的基本方法。Requests库与HTTP协议的方法,功能是一一对应的,包括以下7个方法:requests.request() 构造一个请求,支撑以下各方法的基础方法 requests.get() 获取HTML网页的主要方法,对应HTTP协议的GET requests.head() 获取HTML网页头信息的方法,对应HTTP协议的HEAD requests.post() 向HTML网页提交POST请求的方法,对应HTTP协议的POST requests.put() 向HTML网页提交PUT请求的方法,对应HTTP协议的PUT requests.patch 向HTML网页提交局部修改,对应HTTP协议的PATCH requests.delete() 向HTML网页提交删除请求的方法,对应HTTP协议的DELETE。在这7种方式中,我们除了直接使用request()方法之外,还可以使用requests库的对应方法。比如说,requests.get()、requests.head()、requests.post()来实现。Urequest()还有13个访问控制的参数分别是params,data,json,headers,cookies 和 auth,files,timeout,proxies,allow_redirects 和 stream,verify 和 cert。crapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。我们需要知道的是,scrapy是一种集成框架,类似于request和xpath这些方法在scrapy都有集成。scrapy中,不同模块负责不同的任务分工。首先Scheduler发出请求(Requests),Downloader负责从互联网上下载内容,将下载好的内容(Responses)交给Spiders进行解析,解析完成后将内容Item返回,当然其中可能会涉及到对于解析后数据的进一步处理,这个任务是在Pipeline中完成的。它通常有两种使用方式,分别为直接在python脚本里定义一个爬取数据的类和创建完整的scrapy项目。这次学习使我受益匪浅,使我对python网络爬虫有了一定的了解。

第三次作业-MOOC学习笔记:Python网络爬虫与信息提取的更多相关文章

  1. 第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进 ...

  2. 第三次作业-Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 过程. 5.写一篇不少于100 ...

  3. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  4. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  5. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

  6. Python网络爬虫与信息提取笔记

    直接复制粘贴笔记发现有问题 文档下载地址//download.csdn.net/download/hide_on_rush/12266493 掌握定向网络数据爬取和网页解析的基本能力常用的 Pytho ...

  7. 【学习笔记】PYTHON网络爬虫与信息提取(北理工 嵩天)

    学习目的:掌握定向网络数据爬取和网页解析的基本能力the Website is the API- 1 python ide 文本ide:IDLE,Sublime    Text集成ide:Pychar ...

  8. Python网络爬虫与信息提取(一)

    学习 北京理工大学 嵩天 课程笔记 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解 ...

  9. Python网络爬虫与信息提取[request库的应用](单元一)

    ---恢复内容开始--- 注:学习中国大学mooc 嵩天课程 的学习笔记 request的七个主要方法 request.request() 构造一个请求用以支撑其他基本方法 request.get(u ...

随机推荐

  1. 用 Python 把微信小程序的二维码转化成图片

    官方文档 import cString import requests from tornado.web import authenticated, RequestHandler URL = 'htt ...

  2. 第五章 模块之 logging、copy、re

    5.12 logging 日志模块 报警等级 CRITICAL = 50 # 最高FATAL = CRITICALERROR = 40WARNING = 30WARN = WARNINGINFO = ...

  3. matplotlib笔记3

    关于matplotlib的绘制图形的基本代码,我们可以参照下面的连接 https://matplotlib.org/gallery/index.html https://matplotlib.org/ ...

  4. python检测当前网卡流量信息,用于查看实时网速

    可以用来检测是否有挖矿程序在运行的一个子条件 # coding:utf-8 __author__ = 'chenhuachao' import wmi import time import platf ...

  5. Git和Github的介绍、简单操作、冲突(上)

    目的:   1.git与github简介  2.Git与SVN区别 3.Github 的简单使用 4.下载安装Git-20-64-bit.exe   5.Git常用命令 5.1Git命令使用场景 5. ...

  6. Ubuntu Server Swap 分区设置

    方案一:仅在内存耗尽的情况下才使用 swap 分区 # 首先进入 sudo 模式 sysctl vm.swappiness=0 # 临时生效 echo "vm.swappiness = 0& ...

  7. csredis

    源码地址:https://github.com/2881099/csredis 1.增加了 CSRedisClient 现实集群与连接池管理,和 RedisHelper 静态类快速上手 //普通模式 ...

  8. 使用Docker发布Asp.Net Core程序到Linux

    CentOS安装Docker 按照docker官方文档来,如果有之前安装过旧版,先卸载旧版,没有的话,可跳过. sudo yum remove docker \ docker-client \ doc ...

  9. 读取普通java web项目下的WEB-INF目录下的配置文件(application.xml,xx.properties等配置文件)

    一.在Java web工程WEB-INF下创建weixin.properties属性文件 weixin.properties属性文件里内容如下: 二.创建PropertiesUtils.java测试类 ...

  10. Oracle 定时JOB

    讲一下Oracle创建临时job小窍门,创建Oracle临时JOB是为了临时执行调用过程或者函数,只调用一次. 1.创建Oracle临时job declare VJOB  number; begin ...