python-requests+beautifulSoup实现文本和图片爬取网页爬虫

上周老师开会,突然就去承包了个商业项目,让我负责提供数据。所以最近任务就是---写爬虫

已经很久没有碰过爬虫了,这几天按照甲方的要求弄了一下下~

发现不涉及到登陆的爬虫做起来还是比较简单滴,特此记录一下下。

关于要登陆的网站,比如微博,人人网之类的爬虫,涉及到模拟登陆之类的知识点的详情请见我的另一篇文章啦~

https://blog.csdn.net/qq_40589051/article/details/98368420

本爬虫的实现用的工具包是 python requests+beautifulsoup,本文只记录了我使用到的部分,其他的功能还是得看官方文档哟!

------目录-------

1 requests用法

2 beautifulSoup用法

3 实例---爬取一个网页上的图片和信息

 

1 requests用法

requests是一个超级好用的http第三方库,用在爬虫和服务器客户端通信之类的项目上都很方便。本爬虫只需要用到它来发送http的get请求,获取网页源代码。

涉及到的代码:

r = requests.get(url, timeout=30)

r.raise_for_status()  #HTTP请求返回状态码,200表示成功

r.encoding = r.apparent_encoding 
#r.encoding从HTTP header中猜测的响应内容的编码方式
#r.apparent_encoding从内容中分析响应内容的编码方式(备选编码方式)

r.text  #HTTP响应的字符串形式,即,url对应的页面内容

得到了网页源代码之后,就可以用beautifulsoup来解析啦~

2 beautifulSoup用法

beautifulSoup是将网页源代码转换为树的形式,网页源代码中的标签,就是树的节点,节点中就会有我们所需要的内容。

所以,爬虫就是将网页源代码中的节点(tag)找出来,然后get其中的text。

首先将r.text转换成bs的树形结构:

soup = BeautifulSoup(r.text, "html.parser")

我们都知道HTML源码中有很多标签,比如head、body、title、a标签、p标签....等等,要获取他们当中的内容只需要:

soup.head

soup.title

soup.a

即可~

而每个标签都有自己的属性attr,要将属性中的信息得到,只需要像使用python-字典那样就行啦:

soup.a['class'] #获得a标签下属性为class的值。

soup.a.attrs可以查看a标签下的所有属性。

另外常用的解析网页源代码的方式有三,find()、find_all()、select()

find和find_all区别在官网里面有,没啥大的区别,我只使用了find_all和select所以就不讲find()啦!

find_all的用法:

soup.find_all('h1',{'class':'t_s'})#寻找属性class为t_s的h1标签。

soup.find_all('a')#寻找a标签

soup.find_all(['a','b'])#寻找a和b标签

soup.find_all(id = 'link1')

soup.find_all('a',text='e')#寻找字符串中有e的a标签

soup.find_all('a',text=['e','a'])#寻找字符串中有e或者a的a标签

import re #引入正则表达式

soup.find_all('a',text=re.compile('elll')#寻找字符串中有elll的a标签

select选择器的用法:

soup.select('title')#获取title标签

soup.select('title > p')#获取title下的p标签

select和find_all返回的是结果list,list中都是bs对象tag。只需用tag.get_text()就可以从中取出字符串,像字典一样索引tag中的属性也能够提取出所需要的内容。

3 实例---爬取一个网页上的图片和信息

介绍了这么多,来个例子~爬取https://blog.csdn.net/github_38885296/article/details/90544542上的内容和图片~

首先先上源代码!

# -*- coding:utf-8 -*-
import requests,urllib
from bs4 import BeautifulSoup

url = 'https://blog.csdn.net/github_38885296/article/details/90544542'

r = requests.get(url, timeout=30)
print(r.apparent_encoding)#在爬取过程中发现中文乱码,所以要看看网页编码是不是utf-8,如果不是就得改
r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, "html.parser")
title = soup.find_all('h1',{'class':'title-article'})[0].get_text()#标题
content = soup.find_all('div',{'class':'htmledit_views'})#文字内容
for c in content:
    print(c.get_text())

img = soup.find_all('img')#图片
for i in range(len(img)):
    image = urllib.request.urlopen(img[i]['src']).read()#下载图片
    with open('%s.jpg' % i, 'wb') as a:#保存图片
        a.write(image)

再放结果~

这是爬取下来的文字:

python-requests+beautifulSoup实现文本和图片爬取网页爬虫_第1张图片

 

这是爬取下来的图片~都是可以打开滴~

python-requests+beautifulSoup实现文本和图片爬取网页爬虫_第2张图片

 

代码其实挺固定的,主要是理解用法,要爬取什么网页就要去看源代码,寻找所要爬取部分的内容到底在哪些标签下面。

祝大家学习顺利~✿✿ヽ(°▽°)ノ✿

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(项目实践心得,爬虫)