zoukankan      html  css  js  c++  java
  • python爬虫获取贴吧图片

        我的环境是ubuntu 1.8+自带的python3.6+pycharm。
    学了python就想做点东西,正好拿爬虫练手,当你看到贴吧上的色图,啊呸!美图的时候是不是想保存?
    这个就是效率最大化的工具,全自动色图保存器。
    总的来说基本功能是实现了,但能改进的地方比较多,例如输入吧名代替写死的吧名,现在只能抓取第一页,可改为输入页数范围,
    现在抓取没有限制频率,太猛容易被封IP,还没实现模拟登录,多线程抓取等。这些坑等以后有空再填了。


    import requests
    import os
    from lxml import etree
    class tieba:
    url = 'http://tieba.baidu.com/f?kw=%E7%A2%A7%E8%93%9D%E8%88%AA%E7%BA%BF&pn=0'
    url_sub='https://tieba.baidu.com'
    header = {"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0"}
    img_name = 1
    img_huaji='.png'
    img_link = []
    img_filter=[]

    def my_reque(self,url):
    respon=requests.get(url,headers=self.header)
    html=respon.text.replace(r'<!--','').replace(r'-->','')
    tree = etree.HTML(html)
    return tree

    def save_img(self,list_):
    print('过滤后的连接:'+str(list_))
    for a in list_:
    print('正在保存图片%s.jpg' %str(self.img_name))
    print('图片连接为:'+str(a))
    images = requests.get(a,headers=self.header)
    with open("./img/" + str(self.img_name) +".jpg", "wb") as f:
    f.write(images.content)
    print('save img success:'+str(self.img_name)+'.jpg')
    self.img_name+=1

    def filter(self,lists):
    print('进入filter,正在过滤图片连接,请稍候')
    self.img_link=[]
    for i in lists:
    if self.img_huaji in i:
    continue
    else:
    self.img_link.append(i)
    return self.img_link

    def start(self):
    #打开碧蓝航线吧首页,抓取所有帖子的后缀,贴吧默认一页为50条数据
    tree=self.my_reque(self.url)
    lis=tree.xpath('//div[@class="threadlist_lz clearfix"]/div/a[@rel="noreferrer"]/@href')
    print('获取到的帖子后缀是:'+str(lis))
    self.img_filter=[]
    for li in lis:
    #根据后缀拼出完整连接,然后请求连接(相当于点击进入一个帖子)
    li=self.url_sub+str(li)
    print('打开连接:'+li)
    sub_page=self.my_reque(li)
    #获取这个到帖子的所有图片,后面过滤,把滑稽这种.png的过滤
    img_links=sub_page.xpath('//div[@class="d_post_content_main d_post_content_firstfloor"]//img/@src')
    print('获取到的帖子图片连接是:' + str(img_links))
    self.img_filter=self.filter(img_links)
    self.save_img(self.img_filter)

    if __name__ == '__main__':
    #首先创建爬虫对象
    mySpider = tieba()
    #调用爬虫对象的方法,开始工作
    mySpider.start()
  • 相关阅读:
    Codeforces Round #416 (Div. 2) 本来以为这个时间是晚上的,下午就没做
    World Finals 2017
    MFC拾遗
    Codeforces Round #415 (Div. 2) 翻车啦
    2017年“达内杯”台州学院第十届大学生程序设计竞赛 非官方题解
    TOJ 4008 The Leaf Eaters
    奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort
    python 函数(2)
    Python 函数初识 (1)
    python 文件名的操作
  • 原文地址:https://www.cnblogs.com/newbee-yun/p/12112951.html
Copyright © 2011-2022 走看看