欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬虫练习(二) 使用selenium +浏览器Firefox驱动爬取美女图片

程序员文章站 2022-05-09 21:16:15
...

      同样是百度”图片“随便点开的一个网站,经过前面一章的练习,我们这次就说的快一点。

      因为这次的网站后台使用了js做动态显示,需要使用鼠标滚轮滑倒最最最底部才能显示网页的全部内容,使用urllib已经不能满足我们的需求了

      这里介绍另一种获取网页源码的方式

js = "return document.body.innerHTML;"
page_source = driver.execute_script(js)

呀~,不想哔哔了,上章都讲的差不多了,直接贴源码得了:

      注意:这次不能直接复制回去运行,得记得下载Firefox驱动"geckodriver",驱动放在当前文件的目录下就好。

import re  # 正则
import requests
from selenium import webdriver
import time

'''
这个网站坏得很,需要页面下拉到底部才能抓取网页的完整内容(js影响),
这里与前面用不同的方式抓取网址,需要下载Firefox驱动,并将驱动复制到当前目录下。
'''


url = 'http://pic.hao123.com/meinv?style=xl'

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'
                  ' AppleWebKit/537.36 (KHTML, like Gecko)'
                  ' Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400'
                  ' QQBrowser/10.6.4208.400'
}
pic_index = 47


def download_pic_3(u):
    global pic_index
    # 驱动下载地址: https://github.com/mozilla/geckodriver/releases
    driver = webdriver.Firefox()
    driver.get(u)
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:  # 将页面滑动到底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(0.5)
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    page_source = driver.execute_script("return document.body.innerHTML;")
    driver.close()
    # print(page_source)
    '''
    这个人坏得很,用\/\/来干扰我拿链接,我还要把所有的\都去掉了
    '''
    list_ht = list(page_source)
    str_new = ''
    for list_ht_i in list_ht:
        if list_ht_i == '\\':
            continue
        str_new += str(list_ht_i)
    print("new::", str_new)
    res = re.findall('"(http://hbimg.b0.upaiyun.com/\w+-\w+)"', str_new)
    print("有没有啊:", res)
    print(len(res))
    old_url = ''
    for res_i in res:
        if res_i == old_url:
            continue
        else:
            old_url = res_i
        print("!!!:", res_i)
        a = requests.get(res_i)  # 这里是requests 不是request
        f = open('E:/PIC_YW/%s.jpg' % pic_index, 'wb')
        f.write(a.content)
        f.close()
        print('%s.jpg' % pic_index, '已保存!o(* ̄▽ ̄*)ブ')
        pic_index += 1
    print('-----华丽的分割线-------------------------------------------------------------------')


if __name__ == "__main__":
    url_2 = url
    download_pic_3(url_2)
    print('就这么几张,没了(;′⌒`)')