python网络爬虫学习随笔

---恢复内容开始---

requests库的7个主要方法

方法 描述

requests.request()

构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向HTML网页提交POST请求的方法,对应于HTTPde POST
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTTP页面提交删除的请求,对应于HTTP的DELETE

爬取网页的通用代码框架

import requests
def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()#如果状态不是200,引发HTTPError异常
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "产生异常"
if __name__=="__main__":
    url="http://www.baidu.com"
    print(getHTMLText(url))

连接有风险,异常处理很重要

robots协议  基本语法

#注释  *代表所有     / 代表根目录

user-agent: *

Disallow: /

访问亚马逊网页商品

  查看头部信息r.request.headers     user_agent字段为python-requests被拒绝访问,因此修改头部信息user-agent字段为模拟浏览器首先构造一个键值对

kv={‘user-agent‘:‘Mozilla/5.0‘}   #重新定义user-agent的内容

通过headers字段让代码模拟浏览器放亚马逊服务器提供HTTP请求

访问亚马逊网页全代码

import requests
url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try:
    kv={‘user-agent‘:‘Mozilla/5.0‘}   #标准浏览器
    r=requests.get(url,headers=kv)
    r.raise_for_status()
    r.encoding=r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("爬取失败")

百度,360搜索关键字提交

百度搜索全代码

import requests
keyword = ‘python‘
try:
    kv={‘wd‘:keyword}
    r = requests.get("http://www.baidu.com/s",params=kv)
    r.raise_for_status
    print(len(r.text))
except:
    print("爬取失败")

360搜索代码只需将键值对中的键‘wd‘改为‘q‘

网络图片的爬取和存储

若 一个url链接是以.jpg结尾的,例如http://www.example.com/picture.jpg他就是一个图片链接,且是一个文件

图片爬取全代码

import requests
import os
url =‘http://image.nationalgeographic.com.cn/2017/0211/201702111061910157.jpg‘
root="D://pics//"
path=root+url.split(‘/‘)[-1]
try:
    if not os.path.exists(root):#判断当前根目录是否存在,如果根目录不存在,则建立目录
        os.mkdir(root)
    if not os.oath.exists(path):#判断文件是否存在,文件不存在用get方式从网上获取相关文件
        r=requests.get(url)
        with open(path,‘wb‘) as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
    else:
        print("文件已存在")
except:
    print("爬取失败")

IP地址归属地的自动查询

import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
    r=requests(url+‘202.204.80.112‘)
    r.raise_for_status()
    r.encoding=r.apparent_encoding
    print(r.text[-500:])
except:
    print("爬取失败")

每一个API都对应一个URL,以爬虫的视角看待网络内容

BeautifulSoup库

demo.html

import requests
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
demo

BeautifulSoup库安装小测

from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")
print(soup.prettify())

引用

from bs4 import BeautifulSoup
import bs4

理解

BeautifulSoup 类

from bs4 import BeautifulSoup
soup = BeautifulSoup(‘<htnl>data</html>‘,""html.parser")
soup2 = BeautifulSoup(open(‘D://demo.html‘),"html.parser")

BeautifulSoup类对应一个HTML/XML文档的全部内容

BeautifulSoup库解析器

BeautifulSoup类的基本元素

Tag:任何存在于HTML语法中的标签都可以用soup.<tag>访问获得,当html文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个。

Name:每个<tag>都有自己的名字,通过<tag>.name获取,字符串类型。

Attributes:一个<tag>可以有0个或多个属性,字典类型。

Navigablestring:可以跨越多个层次。

Comment:特殊类型(注释)。

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

<>.....</>构成了所属关系,形成了标签的属性结构

标签树的下行遍历

for child in soup.body.children:
    print(child)      #遍历儿子节点
for child in soup.body.descendant:
    print(child)    #遍历子孙节点

标签树的上行遍历

soup = BeautifulSoup(demo,"html.parser")
for parent in soup.a.parents:
    if parent is None:
        print(parent)
    else:
        print(parent.name)

遍历所有先辈节点,包括soup本身,所以要区别判断。

运行结果

p
body
html
[document]

标签树的平行遍历

平行遍历的条件:所有的平行遍历必须发生在同一个父节点下,如果不是同一个父亲节点下的标签之间不构成平行遍历关系。

注意:

在标签树中,尽管树形结构采用的是标签的形式来组织,但是标签之前的Navigablestring也构成了标签树的节点。即任何一个节点的平行标签他的儿子标签是可能存在Navigablestring类型的,所以不能想当然地认为平行遍历获得的下一个节点一定是标签类型。

for sibling in soup.a.next_siblings:
    print(sibling)         #遍历后续节点
for sibling in soup.a..previous_siblings:
    print(sibling)        #遍历前序节点

基于bs4库的HTML格式输出

prettify()方法:

  可以为HTML文本的标签以及内容增加换行符,也可以对每一个标签做相关处理

bs4库将任何读入的HTML或字符串都转换为utf-8编码,python3.x默认支持编码是utf-8,解析无障碍

form bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")
soup.prettify()
print(soup.prettify())

信息标记的三种形式

XML

JSON(键值对),

使用有类型的键值将信息组织起来,值的地方有多个地方与键相对应,采用 [ ]形式,将新的键值对作为值的一部分放在键值对中,采用{ }形式进行嵌套

YMAL:

无类型的键值对组织信息,兼职之间无“ ”,用缩进来表示所属相关关系。- 表达并列关系,| 表达整块数据,# 表示注释信息,键值对之间可以嵌套

三种信息标志形式的比较

xml:每个信息域定义相关的标签,并且采用嵌套的形式组织起来(大多数信息被标签占用)

json:键值之间用“ ”来表达类型

ymal

信息提取的一般方法

基于bs4的html内容查找方法

find_all()

等价形式:

  <tag>(..)等价于<tag>.find_all(..)

  soup(..)等价于soup.find_all(..)

扩展方法

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

代码实现

import requests
from bs4 import BeautifulSoup
import bs4
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):#检测标签类型,若标签类型不是bs4库定义的Tag类型将被过滤掉
            tds = tr(‘td‘)
            ulist.append([tds[0].string,tds[1].string,tds[3].string])

def printUnivList(ulist,num): #利用数据结构展示并输出结果
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"  #输出结果中中文对齐问题,当中文字符宽度不够采用西文字符填充;中西文宽度不同,采用中文字符的空格填充 chr(12288)
    print(tplt.format("排名","学校名称","总分",chr(12288)))
    for i in range (num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))
    print("Suc"+str(num))

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

显示结果

---恢复内容结束---

原文地址:https://www.cnblogs.com/SGzhang/p/11246387.html

时间: 2024-10-08 14:33:14

python网络爬虫学习随笔的相关文章

python网络爬虫学习笔记

python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章目录 1. 介绍: 2. 从简单语句中开始: 3. 传送数据给服务器 4. HTTP头-描述数据的数据 5. 异常 5.0.1. URLError 5.0.2. HTTPError 5.0.3. 处理异常 5.0.4. info和geturl 6. Opener和Handler 7. Basic Authentication 8. 代理 9. Timeout 设置 10. Cookie 11. Deb

python网络爬虫学习资料

第一:Python爬虫学习系列教程(来源于某博主:http://cuiqingcai.com/1052.html) Python版本:2.7 整体目录: 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库的高级用法 5. Python爬虫入门五之URLError异常处理 6. Python爬虫入门六之Cookie的使用 7. Python爬虫入门七之正则

python 网络爬虫学习笔记(一)

为了方便,在Windows下我用了PyCharm,个人感觉这是一款优秀的python学习软件.爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来. 学习python爬虫前,先学习下其他的一些知识: (一)url URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,

Python网络爬虫学习手记(1)——爬虫基础

1.爬虫基本概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.--------百度百科 简单的说,爬虫就是获取目标网页源代码,并提取和保存网页信息的自动化程序或者脚本.网络爬虫脚本或者程序一般包含如下几个步骤: A.获取网页源代码 爬虫首要的任务就是获取需要爬取的目标网页,也就是网页源代码,一般网页源代码就是一系列HTML代码 B.提取信息 得到了网页源代码后,接下来就是分析该HTML代码,按照一

python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片

本篇博文在编写时参考了http://cuiqingcai.com/2652.html,向作者表示感谢 一.新的问题与工具 平时在淘宝上剁手的时候,总是会看到各种各样的模特.由于自己就读于一所男女比例三比一的工科院校--写代码之余看看美女也是极好的放松方式.但一张一张点右键–另存为又显得太过麻烦而且不切实际,毕竟图片太多了.于是,我开始考虑用万能的python来解决问题. 我们先看看淘女郎页面的URL,https://mm.taobao.com/json/request_top_list.htm?

Python网络爬虫使用总结

网络爬虫使用总结:requests–bs4–re技术路线 简要的抓取使用本技术路线就能轻松应对.参见:Python网络爬虫学习笔记(定向) 网络爬虫使用总结:scrapy(5+2结构) 使用步骤: 第一步:创建工程: 第二步:编写Spider: 第二步:编写Item Pipeline: 第四步:优化配置策略: 工程路径: 网络爬虫使用总结:展望(PhantomJS) 如上所有的两条记录路线仅仅是对网页的处理,只能爬取单纯的html代码.就需要引出"PhantomJS",PhantomJ

Python网络爬虫基础知识学习

对Python有一些简单了解的朋友都知识Python编程语言有个很强大的功能,那就是Python网络爬虫(http://www.maiziedu.com/course/python/645-9570/),一提到Python,就会想到相关的Python爬虫和scrapy等等,今天就来简单认识学习Python爬虫的基础知识,有了一定的相关爬虫知识,以后学习scrapy.urllib等等知识时,会相对轻松些. 爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组

学习《从零开始学Python网络爬虫》PDF+源代码+《精通Scrapy网络爬虫》PDF

学习网络爬虫,基于python3处理数据,推荐学习<从零开始学Python网络爬虫>和<精通Scrapy网络爬虫>. <从零开始学Python网络爬虫>是基于Python 3的图书,代码挺多,如果是想快速实现功能,这本书是一个蛮好的选择. <精通Scrapy网络爬虫>基于Python3,深入系统地介绍了Python流行框架Scrapy的相关技术及使用技巧. 学习参考: <从零开始学Python网络爬虫>PDF,279页,带目录,文字可复制: 配套

爬虫学习 04.Python网络爬虫之requests模块(1)

爬虫学习 04.Python网络爬虫之requests模块(1) 引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. 今日概要 基于requests的get请求 基于requests模块的post请求 基于requests模块ajax的get请求 基于requests模块ajax的post请求 综合项目练习:爬取国家药品监