【Python学习记录】爬虫笔记3——贴吧指定区间页码数内图片的爬取

5 篇文章 0 订阅
3 篇文章 0 订阅

程序爬的是指定区间页码内的本页内所有帖子的第一页的消息(懒得完善成一个帖子内全部了,主要的思路都是相同的)
先上代码
import urllib.request
import requests
import os
from lxml import etree
class Find_img():
def init(self):
# self.base_url = "https://tieba.baidu.com/f?"
self.base_url =‘http://tieba.baidu.com/f?&
self.headers = {
“User-Agent”: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
“Chrome/75.0.3770.100 Safari/537.36”}
self.num =1

def get_param(self):
    self.key =input("输入贴吧名称:")
    self.page1 = input("输入起始页:")
    self.page2 = input("输入终止页")
    self.deal_First_Params()


def deal_First_Params(self):
    page1 = int(self.page1) * 50 - 1
    page2 = int(self.page2) * 50 - 1
    for t in range(page1, page2 + 50, 50):      #第一层循环控制页数
        temp = t
        temp = urllib.parse.urlencode({"pn": temp})
        key = urllib.parse.urlencode({"kw": self.key})
        url = self.base_url + key + '&' + temp
        headers =self.headers
        url = self.base_url + key
        html =requests.get(url,headers).text
        html =etree.HTML(html)
        list_all =html.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')   #每个链接
        base_url = 'http://tieba.baidu.com/'
        for j in (range(len(list_all))):            #第二层循环控制每页的帖子数
            url =base_url + str(list_all[j])
            self.deal_url(url)

def deal_url(self,url):
    headers = self.headers
    html = requests.get(url,headers).text
    html = etree.HTML(html)
    list = html.xpath('//img[@class="BDE_Image"]/@src')
    for res_link in list:       #第三层循环控制每个帖子内的图片数(只分析了首页)
        print(res_link)
        self.save_img(res_link)

def save_img(self,res_link):
    headers =self.headers
    # requests= urllib.request.Request(res_link, headers = headers)
    # img =  urllib.request.urlopen(requests).read()
    files = os.getcwd() + "\图片"  # 创建文件夹路径
    res =requests.get(res_link,headers=headers)
    res.encoding ="utf-8"
    img = res.content #转换为二进制

    if not os.path.exists(files):  # 检查当前路径下此文件
        os.mkdir(files)  # 创建文件夹
    filename ="pic"+str(self.num)  #缩进坑爹
    self.num+=1
    with open(files + "\%s.jpg"%filename, "wb") as f:
        f.write(img)
        print(self.num)

Fun =Find_img()
Fun.get_param()
在这里插入图片描述
接下来上思路
按照惯例第一步是进入F12开发者模式然后分析源码(这次没有用正则表达式直接用了xpath去解析)根据地址栏的变化的规律来构造相应的url(具体的不知道可以看我前两篇)
首先是获取逐页获取源码,然后爬取本页内所有关于帖子的链接(不知道怎么定位代码可以看我第一篇关于爬虫的博客。)
在这里插入图片描述
(通过观察可以发现每一页的所有帖子都被一串数字区分开来,所以目的很明确,就是提取这一串数字然后作为进一步分析的url拼接的部分,来实现爬取本页内所有帖子的图片。
然后点进具体的帖子来进一步分析
在这里插入图片描述
定位到web的图片部分可以发现所有图片的链接都是放在属性为BDE_Image的img标签下面,我们可以通过xpath来解析获取图片的超链接。
最后要以二进制的方式将图片写入文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值