Python爬虫源码,Behance 作品图片及内容 selenium 采集爬虫

前面有分享过requests采集Behance 作品信息的爬虫,这篇带来另一个版本供参考,使用的是无头浏览器 selenium 采集,主要的不同方式是使用 selenium 驱动浏览器获取到页面源码,后面获取信息的话与前篇一致。

Python爬虫源码,Behance 作品图片及内容采集爬虫附工具脚本!

306603cc0e4ec33d6105b0e9b3d23110.png

理论上,几乎所有的页面内容都可以采用无头浏览器来获取,不过考虑到采集页面的效率问题,还是不怎么推荐和建议,不过自动化测试或者是其他方面的应用,可以尝试考虑使用,比如 so long a gigo 本渣渣就有分享过淘宝抢购以及百度刷快排的源码,感兴趣,也可以移动浏览,仅供参考学习使用。

【淘宝】python的淘宝秒杀抢购下单源码参考

79e371207e18365b8b2ca1ac4b7cb161.jpeg

百度快排探究(一),Python selenium 实现自然搜索访问目标网站

a90fd16128489b67d6a49ad0f7bb2d29.png

附上几个关键点,供参考。

537b8303aa8969c1e74ab84bd2489789.png

selenium 配置

由于 selenium 需要驱动浏览器,webdriver 版本号一定要对应,一是对应浏览器,二是对应浏览器版本,这里本渣渣用的是谷歌 chromedriver.exe 。

配置参考:

chromedriver_path = r"D:\chromedriver_win32\chromedriver.exe"  # 完整路径
options = webdriver.ChromeOptions()  # 配置 chrome 启动属性
# options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) #不加载图片,加快访问速度
options.add_experimental_option("excludeSwitches", ['enable-automation'])  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
browser = webdriver.Chrome(executable_path=chromedriver_path, options=options)

浏览器页面下拉

驱动无头浏览器获取整个页面源码,下拉操作是必须的,这里本渣渣使用了随机生成数字来控制下拉页面,仅供参考。

# 滑到页面
    js = "var q=document.documentElement.scrollTop=5000"
    browser.execute_script(js)
    time.sleep(4)

# 生成一个包含10个0到100之间不重复随机数的列表
    lst = random.sample(range(10), 5)
    print(lst)

    for i in lst:
        js = f"var q=document.documentElement.scrollTop={i*500}"
        browser.execute_script(js)
        time.sleep(i)


    # #滑到底部
    # js = "var q=document.documentElement.scrollTop=100000"
    # browser.execute_script(js)
    # time.sleep(2)

    # #滑到顶部
    # js = "var q=document.documentElement.scrollTop=0"
    # browser.execute_script(js)
    # time.sleep(3)

附完整源码供参考:

# -*- coding: UTF-8 -*-
import requests,re,time
from lxml import etree
from selenium import webdriver
import random
import os



def tp(path,img_url,url):
    ua_list = [
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36Chrome 17.0',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0Firefox 4.0.1',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
        'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
    ]
    headers = {
        'Connection': 'close',
        'referer': url,
        "User-Agent": random.choice(ua_list)
    }
    img_name=img_url.split('/')[-1]
    r = requests.get(img_url,headers=headers,timeout=10)
    time.sleep(1)
    with open(f'{path}{img_name}','wb')as f:
        f.write(r.content)
    print(f"{img_name}下载图片成功")



def get_detail(url):
    # chromedriver_path = r"C:\Users\Administrator\AppData\Local\Programs\Python\Python37\chromedriver.exe"  # 完整路径
    chromedriver_path = r"D:\chromedriver_win32\chromedriver.exe"  # 完整路径
    options = webdriver.ChromeOptions()  # 配置 chrome 启动属性
    # options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) #不加载图片,加快访问速度
    options.add_experimental_option("excludeSwitches", ['enable-automation'])  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium

    browser = webdriver.Chrome(executable_path=chromedriver_path, options=options)

    browser.get(url)
    time.sleep(10)

    # 滑到页面
    js = "var q=document.documentElement.scrollTop=5000"
    browser.execute_script(js)
    time.sleep(4)

    #获取网页标题
    h2=browser.title
    print(h2)
    h2 = h2.strip()
    h2 = h2.replace('|', '')
    pattern = r"[\/\\\:\*\?\"\<\>\|]"
    h2 = re.sub(pattern, "_", h2)  # 替换为下划线
    print(h2)

    path=f'{h2}/'
    os.makedirs(path,exist_ok=True)

    # 生成一个包含10个0到100之间不重复随机数的列表
    lst = random.sample(range(10), 5)
    print(lst)

    for i in lst:
        js = f"var q=document.documentElement.scrollTop={i*500}"
        browser.execute_script(js)
        time.sleep(i)


    # #滑到底部
    # js = "var q=document.documentElement.scrollTop=100000"
    # browser.execute_script(js)
    # time.sleep(2)
    #
    # #滑到顶部
    # js = "var q=document.documentElement.scrollTop=0"
    # browser.execute_script(js)
    # time.sleep(3)

    # 打印当前网页源码
    html = browser.page_source
    with open(f'{path}{h2}.html', 'w', encoding='utf-8') as f:
        f.write(html)

    get_html(path,h2,html,url)


#解析页面
def get_html(path,h2,html,url):
    tree=etree.HTML(html)

    main_text = tree.xpath('//div[@class="main-text"]//span/text()')
    text = '\n'.join(main_text)
    text = f'{h2}\n\n{text}'
    with open(f'{path}{h2}.txt', 'w', encoding='utf-8') as f:
        f.write(text)

    imgs=tree.xpath('//div[@class="ImageElement-root-kir ImageElement-loaded-icR"]/img/@src')
    print(imgs)
    for img in imgs:
        try:
            tp(path,img, url)
        except Exception as e:
            print(e)
            time.sleep(4)
            try:
                tp(path, img, url)
            except Exception as e:
                print(e)
                time.sleep(6)
                pass

        time.sleep(5)


if __name__=="__main__":
    url="https://www.behance.net/gallery/174203985/Squashy?tracking_source=search_projects_recommended"
    #url = "https://www.behance.net/gallery/152037689/CLIO-DEWY-BLUR-TINT?tracking_source=search_projects"
    get_detail(url)

·················END·················

你好,我是二大爷,

革命老区外出进城务工人员,

互联网非早期非专业站长,

喜好python,写作,阅读,英语

不入流程序,自媒体,seo . . .

公众号不挣钱,交个网友。

读者交流群已建立,找到我备注 “交流”,即可获得加入我们~

听说点 “在看” 的都变得更好看呐~

关注关注二大爷呗~给你分享python,写作,阅读的内容噢~

扫一扫下方二维码即可关注我噢~

c980171f3755e5e79c08e0590f5d0a2f.jpeg

440e6c4d2522dee18805afb12773c956.png

关注我的都变秃了

说错了,都变强了!

不信你试试

005b73982431dfc6269084c28e944b03.jpeg

扫码关注最新动态

公众号ID:eryeji

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值