从零开始的爬虫学习(一)

本文介绍了爬虫的环境搭建,一个简单的图片爬取例子,最后介绍两个常见的小错误,
AttributeError: ‘NoneType’ object has no attribute 'find
“requests.exceptions.InvalidSchema: No connection adapters were found for…”

什么是爬虫?
这是一篇解释的比较容易理解的博文。

从零学习爬虫,逃不开安装环境。

完成安装环境,下一步就是安装常用的爬虫包了,这里提到主要是这两个包,request 和 BeautifulSoup (美味的汤)
这两个包是比较常见的,也比较好用。

import requests
from bs4 import BeautifulSoup

这两个包都可以在Pycharm中直接下载。

File–>Setings–>Project Interpreter
从零开始的爬虫学习(一)_第1张图片
点击加号,搜索添加包从零开始的爬虫学习(一)_第2张图片
这也是添加引用包的方法,当然手动添加也可以,这里就不说了。

安装环境打好后就可以开始编程了。
博主之前没有学过py,所以介绍的部分可能比较基础。
废话少说,直接上代码。

import requests
from bs4 import BeautifulSoup
import os
import lxml
import random
 
url = "https://www.baidu.com/"

r = requests.get(url)
r.raise_for_status()

bs = BeautifulSoup(r.text, 'lxml')
image = bs.find("div", {"id": "lg"}).find("img")["src"]

ir = requests.get("http:"+ image)
if ir.status_code == 200:
    open('logo.jpg', 'wb').write(ir.content)

本例实现的是从百度官网下载百度logo。
主要用到了 request.get 函数和 BeautifulSoup.find 函数
具体实现参照了这篇回答

简单总结一下我的理解,URL是一种网络寻址的路径,用来定位资源,和网站网址类似。
r = requests.get(url)
get函数的具体结构可以参照这篇博文
get函数模仿主机去点击网址的方式,给网站发送请求,并接收回应,get的返回值是网站反馈的Request对象。
r.raise_for_status()是建议反馈的Request对象是否正常的工具,具体内容可以看这篇博文

bs = BeautifulSoup(r.text, ‘lxml’)
image = bs.find(“div”, {“id”: “lg”}).find(“img”)[“src”]
这里讲BeautifulSoup实例化,因为是由get的返回值实例化的,调用find函数去返回的网页中找百度logo
如果报错
AttributeError: ‘NoneType’ object has no attribute 'find
请检查find是否能找到具体目标src。
从零开始的爬虫学习(一)_第3张图片
可以这样理解,find先去找 div类中 id=lg 的位置,在去找其中img下的src,将src给到image。

ir = requests.get(“http:”+ image)
因为 image中存放的是 //www.baidu.com/img/bd logo1.png
我们要去访问他就需要补全网站 http://www.baidu.com/img/bd logo1.png。
ir = requests.get(“http:”+ image)
否则访问就会报错
“requests.exceptions.InvalidSchema: No connection adapters were found for…”

open(‘logo.jpg’, ‘wb’).write(ir.content)
最后打开logo.jpg存放图片。

到这基础爬取已经完成,下次将对具体的漫画网站进行爬取。

你可能感兴趣的:(py)