爬虫学习小记

1.requests库安装

pip install requests

举例:

>>> import requests
>>> r = requests.get("http://www.baidu.com")
>>> r.status_code
200   #200表示成功
>>> r.encoding = "utf-8"
>>> r.text   #打印网页内容
'\r\n 百度一下,你就知道  

关于百度 About Baidu

©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

\r\n

这样,百度的主页已经成功被抓取下来了。

requests的7个主要的方法


爬虫学习小记_第1张图片
image.png

2.requests库的get()方法

爬虫学习小记_第2张图片
image.png

爬虫学习小记_第3张图片
image.png

requests库get方法的源代码


爬虫学习小记_第4张图片
image.png

所以,requests库的get()方法实际上是调用requests库的request的方法来实现的
所以,虽然requests库有7中方法,但是实际上可以把它理解成一种方法,也就是request的方法。


爬虫学习小记_第5张图片
image.png

重点看一下response对象

爬虫学习小记_第6张图片
image.png
爬虫学习小记_第7张图片
image.png

爬虫学习小记_第8张图片
image.png

爬虫学习小记_第9张图片
image.png

原则上,r.apparent_encoding 是比r.encoding更为准确的一种形式

3.爬取网页的通用代码框架
6种常见的requests库的连接异常


爬虫学习小记_第10张图片
image.png

爬虫学习小记_第11张图片
image.png

爬虫学习小记_第12张图片
image.png

爬虫学习小记_第13张图片
image.png

通用代码框架使得用户爬取网页更加可靠,有效,稳定

3.HTTP协议以及request库方法

HTTP协议:超文本传输协议


爬虫学习小记_第14张图片
image.png

简单的说,就是用户发起请求,服务器发生响应,这就是简单的请求与响应模式


爬虫学习小记_第15张图片
image.png

爬虫学习小记_第16张图片
image.png

爬虫学习小记_第17张图片
image.png

爬虫学习小记_第18张图片
image.png

爬虫学习小记_第19张图片
image.png

爬虫学习小记_第20张图片
image.png
爬虫学习小记_第21张图片
image.png

r.headers反馈得到的头部信息
当试图展示全部内容,用r.text,结果为空


爬虫学习小记_第22张图片
image.png
爬虫学习小记_第23张图片
image.png
爬虫学习小记_第24张图片
image.png

4.requests库主要方法的解析

爬虫学习小记_第25张图片
image.png

爬虫学习小记_第26张图片
image.png

爬虫学习小记_第27张图片
image.png

爬虫学习小记_第28张图片
image.png
爬虫学习小记_第29张图片
image.png

爬虫学习小记_第30张图片
image.png
爬虫学习小记_第31张图片
image.png

爬虫学习小记_第32张图片
image.png

爬虫学习小记_第33张图片
image.png
爬虫学习小记_第34张图片
image.png

爬虫学习小记_第35张图片
image.png

爬虫学习小记_第36张图片
image.png

爬虫学习小记_第37张图片
image.png

爬虫学习小记_第38张图片
image.png

爬虫学习小记_第39张图片
image.png

爬虫学习小记_第40张图片
image.png

5.爬取实例

(1)京东商品页面的爬取


爬虫学习小记_第41张图片
image.png

(2)亚马逊商品页面的爬取


爬虫学习小记_第42张图片
image.png

爬虫学习小记_第43张图片
image.png
爬虫学习小记_第44张图片
image.png

亚马逊的服务器识别了这次访问是由requests库的爬虫引起的
所以
先构建一个键值对


image.png

重新定义了user-agent,使它等于Mozilla/5.0


image.png

对headers进行修改


image.png

这时候,user-agent就变成了Mozilla/5.0
返回的结果


爬虫学习小记_第45张图片
image.png

爬虫学习小记_第46张图片
image.png

(3)百度360搜索关键词提交
爬虫学习小记_第47张图片
image.png

爬虫学习小记_第48张图片
image.png

爬虫学习小记_第49张图片
image.png

爬虫学习小记_第50张图片
image.png

(4)网络图片的爬取和储存


爬虫学习小记_第51张图片
image.png
爬虫学习小记_第52张图片
image.png

(5)IP地址归属地的自动查询

6.Beautiful Soup库的安装

pip install beautifulsoup4
爬虫学习小记_第53张图片
image.png

爬虫学习小记_第54张图片
image.png

两种方式获取源代码
1是可以直接浏览器上查看网页源代码


爬虫学习小记_第55张图片
image.png

2是可以用requests
爬虫学习小记_第56张图片
image.png

除了给出demo,还需要给出一个解析demo的解释器,这里的解释器是html.parser,也就是说我们这里是对demo进行html的解析


爬虫学习小记_第57张图片
image.png

beautifulsoup库只需要2行代码


爬虫学习小记_第58张图片
image.png

7.Beautiful Soup库的基本元素

爬虫学习小记_第59张图片
image.png

任何的html文件都是由一组尖括号组成的标签组织起来的,每一对尖括号构成一个标签,而标签之间存在上下游关系,形成一个标签树


爬虫学习小记_第60张图片
image.png

爬虫学习小记_第61张图片
image.png
爬虫学习小记_第62张图片
image.png

爬虫学习小记_第63张图片
image.png

爬虫学习小记_第64张图片
image.png
爬虫学习小记_第65张图片
image.png
爬虫学习小记_第66张图片
image.png

使用soup.title可以获得title信息
使用soup.a获得a标签的tag
当html中包含多个相同的tag时,使用soup.tag是会获得第一个tag信息


爬虫学习小记_第67张图片
image.png

soup.a.name获得a标签的名字
soup.a.parent.name获得a标签的父亲的名字,也就是包含a标签的上一级标签的名字
soup.a.parent.parent.name同理,获得的是上上级标签的名字


爬虫学习小记_第68张图片
image.png

tag.attrs获取tag的属性信息,可以看出来它是一个字典,存在键值对
因此,可以用
tag.attrs['class']来获得class属性的值
tag.attrs['href']来获得href属性的值
type(tag.attrs)可以获得属性的类型,它是一个dict

type(tag),获取tag的类型信息


爬虫学习小记_第69张图片
image.png

soup.a.string获得tag a的NavigableString
可以看出,p标签中还包含一个b标签
因此,soup.tag.string可以跨标签获得标签的NavigableString
比如
image.png

爬虫学习小记_第70张图片
image.png

beautiful soup的comment信息

8.基于bs4库的HTML内容的遍历方法

爬虫学习小记_第71张图片
image.png

爬虫学习小记_第72张图片
image.png
爬虫学习小记_第73张图片
image.png

要注意的是,contents返回的是列表,而children和descendants返回的是迭代类型,需要for循环输出


爬虫学习小记_第74张图片
image.png

爬虫学习小记_第75张图片
image.png
爬虫学习小记_第76张图片
image.png

爬虫学习小记_第77张图片
image.png

爬虫学习小记_第78张图片
image.png

爬虫学习小记_第79张图片
image.png

爬虫学习小记_第80张图片
image.png

爬虫学习小记_第81张图片
image.png
爬虫学习小记_第82张图片
image.png
爬虫学习小记_第83张图片
image.png

9.基于bs4库的HTML格式输出

爬虫学习小记_第84张图片
image.png

爬虫学习小记_第85张图片
image.png

爬虫学习小记_第86张图片
image.png

print之后都分行显示


爬虫学习小记_第87张图片
image.png

爬虫学习小记_第88张图片
image.png

10.信息标记的三种形式

爬虫学习小记_第89张图片
image.png

爬虫学习小记_第90张图片
image.png

爬虫学习小记_第91张图片
image.png

爬虫学习小记_第92张图片
image.png

爬虫学习小记_第93张图片
image.png

爬虫学习小记_第94张图片
image.png

爬虫学习小记_第95张图片
image.png
爬虫学习小记_第96张图片
image.png

爬虫学习小记_第97张图片
image.png

爬虫学习小记_第98张图片
image.png

爬虫学习小记_第99张图片
image.png

爬虫学习小记_第100张图片
image.png

爬虫学习小记_第101张图片
image.png

爬虫学习小记_第102张图片
image.png

爬虫学习小记_第103张图片
image.png

爬虫学习小记_第104张图片
image.png

11.三种信息标记形式的比较

爬虫学习小记_第105张图片
image.png

爬虫学习小记_第106张图片
image.png

爬虫学习小记_第107张图片
image.png

爬虫学习小记_第108张图片
image.png

爬虫学习小记_第109张图片
image.png

12.信息提取的一般方法

爬虫学习小记_第110张图片
image.png

爬虫学习小记_第111张图片
image.png

爬虫学习小记_第112张图片
image.png

爬虫学习小记_第113张图片
image.png

爬虫学习小记_第114张图片
image.png

13.基于bs4库的HTML内容查找方法

爬虫学习小记_第115张图片
image.png

爬虫学习小记_第116张图片
image.png

爬虫学习小记_第117张图片
image.png

如果给find_all的参数是True,将返回所有的标签信息


爬虫学习小记_第118张图片
image.png

爬虫学习小记_第119张图片
image.png

爬虫学习小记_第120张图片
image.png

爬虫学习小记_第121张图片
image.png
爬虫学习小记_第122张图片
image.png

爬虫学习小记_第123张图片
image.png

爬虫学习小记_第124张图片
image.png

爬虫学习小记_第125张图片
image.png

爬虫学习小记_第126张图片
image.png

爬虫学习小记_第127张图片
image.png

14.中国大学排名定向爬虫实例

(1)实例介绍


爬虫学习小记_第128张图片
image.png

爬虫学习小记_第129张图片
image.png

爬虫学习小记_第130张图片
image.png

爬虫学习小记_第131张图片
image.png

爬虫学习小记_第132张图片
image.png

爬虫学习小记_第133张图片
image.png

(2)中国大学排名定向爬虫实例代码编写

import requests
import bs4
import requests
import bs4
import requests
import bs4
from bs4 import BeautifulSoup
def getHTMLText(url):
   try:
      r = requests.get(url,timeout = 30)
      r.raise_for_status()
      r.encoding = r.apparent_encoding
      return r.text
   except:
      return ""

def fillUnivList(ulist,html):
   soup = BeautifulSoup(html,'html.parser')
   for tr in soup.find('tbody').children:
      if isinstance(tr,bs4.element.Tag):
         tds = tr("td")
         ulist.append([tds[0].string,tds[1].string,tds[2].string])


def printUnivList(ulist,num):
   print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
   for i in range (num):
     u = ulist[i]
     print ("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

def main():
   uinfo = []
   url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html"
   html = getHTMLText(url)
   fillUnivList(uinfo,html)
   printUnivList(uinfo,20)
main()

结果如下

排名       学校名称       总分    
    1        清华大学      北京市    
    2        北京大学      北京市    
    3        浙江大学      浙江省    
    4       上海交通大学     上海市    
    5        复旦大学      上海市    
    6        南京大学      江苏省    
    7       中国科学技术大学       安徽省    
    8       哈尔滨工业大学    黑龙江省   
    9       华中科技大学     湖北省    
    10       中山大学      广东省    
    11       东南大学      江苏省    
    12       天津大学      天津市    
    13       同济大学      上海市    
    14      北京航空航天大学       北京市    
    15       四川大学      四川省    
    16       武汉大学      湖北省    
    17      西安交通大学     陕西省    
    18       南开大学      天津市    
    19      大连理工大学     辽宁省    
    20       山东大学      山东省    

(3)中国大学排名定向爬虫实例优化
问题:


爬虫学习小记_第134张图片
image.png

结果的中文不对齐


爬虫学习小记_第135张图片
image.png

爬虫学习小记_第136张图片
image.png

你可能感兴趣的:(爬虫学习小记)