爬虫 - 百度贴吧相册

爬虫-百度贴吧相册

前些天写了两篇都没能过审,太难了,就连普通的小姐姐都过不了。哎,小姐姐怎么可以被认为是低俗。今天爬一点正经的 爬个百度贴吧相册吧。
现在多多少少爬了些网站, 一般都要求headers, 有一些爬到的图片打不开,要加Referer。有些要加authorization, 否则它不响应。有些要cookie的,反正就这么一回事。但我爬了百度贴吧才知道它有多骚,直接爬陈奕迅贴吧时,我是用requests模块来的,用xpath解析了大半天,一直返回空列表,之后又用BeautifulSoup试了试,还是空列表。最后发现返回页面的代码,被它注释了,真皮。去掉注释后,找到了具体每个相册的url, 到了相册内部的页面,我再尝试requests请求,却发现返回的代码独独少了具体每张图片的url相关数据,真花里胡哨。我他喵的直接用selenium爬,用selenium时没有设为开发者模式,又没有数据返回,只好又设置了selenium的开发者模式。最后才如尝所愿。源代码如下:

# 百度贴吧 陈奕迅图片
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
from selenium import webdriver


urls = []
name = []


def get_urls(input):
    ua = UserAgent()
    headers = {'User-Agent': ua.random}
    proxy = ''  # 自己的代理地址
    proxies = {
        'http': 'http://' + proxy,
        'https': 'https://' + proxy
    }
    url =f'https://tieba.baidu.com/f?kw={input}&ie=utf-8&tab=album'
    response = requests.get(url, headers=headers, proxies=proxies).text
    html = response.replace(r'<!--', ' ').replace(r'-->', ' ').replace('#', '"')
    # 这个必须注释一下, 这里xpath 解析不出来主要是因为 服务器给我返回的源码 大部分都打了注释
    # 百度真皮
    global urls
    global name
    html_useful = etree.HTML(html)
    urls = html_useful.xpath('//div[@id="good_right"]//div[@class="gr_block_main"]//div[@class="grbm_ele_wrapper"]//a[@class="grbm_ele_a grbm_ele_big"]/@href')
    name = html_useful.xpath('//div[@id="good_right"]//div[@class="gr_block_main"]//div[@class="grbm_ele_wrapper"]//div[@class="grbm_ele_title"]//a/text()')
    # print(response)
    global path_fore
    for j in range(len(name)):
        path_fore = os.path.join('chenyixun', name[j])
    print(urls)
    print(name)


def image_urls(num, xiang_name):
    url = f'https://tieba.baidu.com{num}#!/l/p1'   # 相册地址
    options = webdriver.ChromeOptions()
    # options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})  # 不加载图片加快访问速度
    options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 设置为开发者模式,防止被网站识别出来是selenium
    # options.add_argument('--headless')   # 浏览器窗口不会弹出
    browser = webdriver.Chrome(executable_path="C:/Users/86137/AppData/Local/Programs/Python/Python38/chromedriver.exe", options=options)

    browser.get(url)
    html = browser.page_source
    browser.close()
    html_useful = etree.HTML(html)
    image_url = html_useful.xpath('//div[@class="ag_container"]//div[@class="ag_main"]//a[@class="ag_ele_a"]//img/@src')

    ua = UserAgent()
    headers = {'User-Agent': ua.random}
    proxy = ''  # 自己的代理地址 
    proxies = {
        'http': 'http://' + proxy,
        'https': 'https://' + proxy
    }
    for j in range(len(image_url)):
        response_image = requests.get(image_url[j], headers=headers, proxies=proxies)
        content = response_image.content
        path_file = os.path.join('chenyixun', xiang_name + str(j) + '.jpg')
        with open(path_file, 'wb')as f:
            f.write(content)


if __name__ == "__main__":
    if not os.path.exists('chenyixun'):
        os.mkdir('chenyixun')
    get_urls('陈奕迅')
    i = 0
    for num in urls:
        xiang_name = name[i]
        print(name[i] + ':正在下载')
        image_urls(num, xiang_name)
        i += 1
        print(name[i]+':正在下载完成')

自己也试了试,fiddler抓包,要手机设置相关的代理Ip和安装相关证书,很难过的是B站和抖音视频现在,已经使用了SSL Pining 相关技术防止中间人攻击了,要想抓包就得root手机,并使用相应得应用来辅助抓包了,特别是抖音,连个网页版都没得。太复杂没有做后续。但我发现今日头条现在还是可以的,太不严谨了吧。
可惜了我爬的小姐姐没过审,就这些学业繁忙,告辞。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值