爬虫学习笔记:爬取百度贴吧(美女吧)图片

1、摘要

目的:爬虫项目学习,使用requests方法,爬取百度贴吧美女吧每个帖子的图片,并保存到本地中。

方法:首先,通过requests请求美女吧网页内容;其次,通过xpath方法清洗数据,获取到每个帖子的url地址;再次,请求每个帖子的地址,并从每个帖子地址中爬取图片链接;最后,请求图片数据,以二进制格式保存数据到本地。

2、网页分析

如下图所示,为本次爬取的目标网站,百度美女吧,需求:爬取每个帖子中的图片,并保存到本地。爬取该网站首先需要对该网站的特点进行分析,需要分析的内容包含:网站页面的特点、帖子url地址特点、图片链接地址如何获取。下面我一一介绍这几点需要分析的内容:

爬虫学习笔记:爬取百度贴吧(美女吧)图片_第1张图片

 

 2.1 美女吧网页特点

美女吧:https://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0

通过观察可以看出:kw是搜索内容,pn是页码,第一页为0,第二页为50,所以页码的公式为pn=(页数-1)*50。

2.2 帖子url地址特点

通过右键—检查,可以查看网页源码信息,从中我们可以定位到每一条帖子的代码,如下图所示:

爬虫学习笔记:爬取百度贴吧(美女吧)图片_第2张图片

 

 可以看到,点击“我真的太漂亮”帖子,定位到该条代码,由此可见帖子的url地址就在这条代码里;然后点击href = p/6593341944,发现跳转到帖子“我真的太漂亮”里,并且此时的url地址为:https://tieba.baidu.com/p/6593341944,于是可以发现,帖子的地址主要由两部分组成:https://tieba.baidu.com/+href的内容。于是我们只需要将href =  p/6593341944内容爬取下来,然后拼接,就能得到每一条帖子的地址。

通过xpath_help工具,写入://div[@class="threadlist_title pull_left j_th_tit "]/a/@href,得到每一条url地址的一部分。

爬虫学习笔记:爬取百度贴吧(美女吧)图片_第3张图片

 

 

2.3 获取帖子的图片链接

获取到每一条帖子的链接,也通过类似操作,查找帖子内图片的链接地址,如下图定位到图片的链接

爬虫学习笔记:爬取百度贴吧(美女吧)图片_第4张图片

 

 如法炮制,通过xpath_help匹配图片链接,代码为://img[@class="BDE_Image"]/@src

 

 3、程序代码:

# -*- coding: utf-8 -*-
import requests
from lxml import etree
import os
#爬虫
class BtcSpider(object):
    def __init__(self):
        #爬取美女吧图片
        #解析:美女吧url地址,pn值决定页数,pn =0 ,表示第一页,pn = 50 表示第二页……
        self.url = 'https://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3&ie=utf-8&pn={}'
        self.headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
        }
        os.makedirs('美女吧图片',exist_ok=True)
        self.dir = '美女吧图片\\'
    #发送请求
    def get_response(self,url):
        response = requests.get(url,headers = self.headers)
        data = response.text
        return data
    #发送请求获取网页数据,数据读取方式为二进制content形式
    def get_data(self,url):
        data  = requests.get(url,headers = self.headers).content
        return data
    #解析数据,封装xpath
    def get_xpath(self,html,pattern):
        #构建树
        p = etree.HTML(html)
        #解析网页内容,获取url_lists
        result = p.xpath(pattern)
        return result
    #下载图片&
    def download_src(self,url):
        html = self.get_response(url)
        html = html.replace("
                    

你可能感兴趣的:(代码专区)