前言
最近主要在学爬虫,学了Python就得展示出它的优势(主要是为了炫耀才学的 ),在学习的过程中也和大家分享一下方法。
如果你要学爬虫,建议你先把html学一下,这很重要,学到后面就知道了。
Python版本:3.7.4
电脑系统:Windows10,64位
所谓爬虫,就是从网络上获取数据(一般是批量获取),可以是图片也可以是字符等。但无论如何请记住,不管你要从网上爬取什么,频率不能太高,这样会造成风险:
第一:你可能会被网站限流或封号,这只是小事。
第二(遇到这个你就可能犯法了):别人的服务器会受损,如果是小网站,服务器就崩了。
配置
废话不多说,先下载第三方库。
Win + R,输入cmd,cd到Python/Scripts目录(具体路径视个人情况而定):
> pip install bs4
> pip install requests
> pip install lxml
正式教学
我们先看看requests和bs4加在一起用会怎么样
from bs4 import BeautifulSoup
import requests
response = requests.get("https://www.baidu.com")
soup = BeautifulSoup(response.content, features="lxml")
print(soup.prettify())
可以看到,这是一个百度首页的源代码,你可以把网址换掉试一下(在没有请求头的情况下,大部分网站都爬不了,关于请求头,我之后会讲)
我们可以用soup.a获取网站的第1个a标签,同理soup.img可以找到第1个img标签,可如果网页有多个相同标签呢?
BeautifulSoup有一个方法find_all(),可以找到html的所有标签,以列表形式返回。在方法中加参数,可以找出特定一种标签,如果参数是列表,那么就找出特定多种标签。方法还有一个参数attrs,输入一个字典,可以找到特定属性的特定标签,如:
soup.find_all("img", attrs={
"id", "image"})
可以找到网页中所有id是image的img标签。
如果要获取标签的属性,可以用label.attrs获取,返回字典,其中label是标签。
标签的文本用label.text获取
以上是比较常用的代码,其它我就不提及了。
举个栗子
现在,我们来爬取百度首页上的图片并保存(别问我为什么爬这个,那你说要爬啥 )。
首先,要获取网站源代码。
response = requests.get("https://www.baidu.com")
soup = BeautifulSoup(response.content, features="lxml")
这一部分刚刚已经完成过了,接下来需要遍历img标签,获取它们的src标签。
完整代码:
from bs4 import BeautifulSoup
import requests
import random
import time
response = requests.get("https://www.baidu.com")
soup = BeautifulSoup(response.content, features="lxml")
count = 1
for img in