Python 爬虫入门抓取信息

从 Web 中抓取信息

重复别人所说的话,只需要教育;而要挑战别人所说的话,则需要头脑。——玛丽·佩蒂博恩·普尔

利用 webbrowser 模块 访问页面

  • 必须利用 webbrowser 模块 提供的函数 open(地址)

  • 这样他就会自动帮你访问百度网址


import webbrowser

webbrowser.open("https://www.baidu.com/")

利用 request 模块从 web 下载文件

  • request 模块让你很容易从 Web 上下载文件,不必担心链接问题等等。request 必须安装

安装


pip install requests

使用 requests 模块


import requests

使用 requests() 函数下载一个网页

  • 成功 res.status_code

import requests

res = requests.get('https://jsopy.gitee.io/medias/banner/1.jpg')

# if (res.status_code == requests.codes.ok):
#     print("对了")

print(type(res))
print(res.status_code)  # 状态码 请求成功就是200 失败就是404
  • 失败的时候最稳妥的是调用 raise_for_status()这样就会抛出异常,不会让程序崩溃

import requests

res = requests.get('https://jsopy.gitee.io/medias/banner3/1.jpg')

try:
    res.raise_for_status()
    print(res.status_code)
except:
    print("没有请求到")

将下载的文件保存到硬盘

  • 需要利用 with open 必须是 wb 形式 和 requests 模块 和 res.iter_content

import requests

res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')

try:
    res.raise_for_status()
    with open("./downland.txt", 'wb') as item:
        for chunk in res.iter_content(100000):
            item.write(chunk)
except:
    print("没有请求到")

# 结果就是请求到文件 存到downland.txt里面

用 BeautifulSoup 模块解析 HTML

BeautifulSoup 安装


pip install beautifulsoup4

从 HTML 创建一个 BeautifulSoup 对象

  • 从网页中

import requests
import bs4

res = requests.get('https://www.17cry.com/')

try:
    res.raise_for_status()
    example = bs4.BeautifulSoup(res.text) # BeautifulSoup 对象
    print(type(example))

except:
    print("没有请求到")

# 结果 <class 'bs4.BeautifulSoup'>
  • 也可以从文件中

import requests
import bs4


try:
    with open('./index.html', 'r', encoding='utf-8') as item:
        result = bs4.BeautifulSoup(item)
        print(result)

except:
    print("没有请求到")

用 select 方法寻找元素


import requests
import bs4

res = requests.get('https://www.17cry.com/')

try:
    res.raise_for_status()
    example = bs4.BeautifulSoup(res.text)  # BeautifulSoup 对象
    result = example.select('ul')  # 找到ul元素
    print(result)

except:
    print("没有请求到")

# 结果 找到ul的元素

  • 选择器属性类似 css 选择器
选择器 匹配
soup.select(‘div’) 找到名为 div 的元素
soup.select(‘#haha’) 找到 id 是 haha 的元素
soup.select(‘.haha’) 找到类是 haha 的元素
soup.select(‘div span’) 找到所在 div 元素之内的的 span 元素
soup.select(‘div>span’) 找到直接在 div 元素之内的 span 元素,中间没有其他的元素
  • 这个时候你想要获取到的是中国字就需要转码实现

import requests
import bs4

res = requests.get('https://www.17cry.com/')

try:
    res.raise_for_status()
    res.encoding = "utf8"  # 或者gb18030
    example = bs4.BeautifulSoup(
        res.text)  # BeautifulSoup 对象
    result = example.select('li')  # 找到a元素
    print(result)
    print(result[0].getText()) # 获取到内容

except:
    print("没有请求到")

# 结果
# [<li>后续敬请期待</li>, <li><a href="http://www.beian.miit.gov.cn" style="width:100%;height:100%;display:block;" target="_blank">网站备案号:津ICP备15001525号</a></li>]
# 后续敬请期待

输出元素的属性

  • get(属性)

  • attrs 全部属性


import requests
import bs4

res = requests.get('https://www.17cry.com/')

try:
    res.raise_for_status()
    res.encoding = "utf8"  # 或者gb18030
    example = bs4.BeautifulSoup(
        res.text)  # BeautifulSoup 对象
    result = example.select('a')  # 找到a元素
    print(result[0].get('style'))
    print(result[0].attrs)

except:
    print("没有请求到")

# 结果
# width:100%;height:100%;display:block;
# {'href': 'http://www.beian.miit.gov.cn', 'target': '_blank', 'style': 'width:100%;height:100%;display:block;'}

下载网页上所有图片


import requests
import bs4
import os

url = 'https://jsopy.gitee.io/'

res = requests.get(url)

try:
    res.raise_for_status()
    res.encoding = 'utf8'
    result = bs4.BeautifulSoup(res.text)
    result_img = result.select("img")  # 获取到页面上所有图片的地址
    os.makedirs('img')
    for content in result_img:
        imgurl = content.get('src')  # 获取到单个图片的地址
        name = os.path.basename(imgurl)  # 只返回文件的最后名字 例如logo2.png
        print(imgurl)
        result_img_item = requests.get(url + imgurl)  # 获取到图片信息
        with open('./img/' + name, 'wb') as item:
            for chunk in result_img_item:
                item.write(chunk)
        print("over")
except:
    print("没有请求到")

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录