0


python selenium 不用下载驱动且能执行js 代码爬取网页

这段Python代码主要实现的功能是爬取指定网页上的图片链接,并从链接中获取图片并保存到本地的指定路径。代码首先导入了所需的几个Python包,包括在上网过程中需要用到的requests包、re包用于匹配字符串以及在浏览器中爬取网页需要用到的selenium包。代码中使用了selenium包中的webdriver类来指定使用的浏览器驱动,这里用的是Chrome浏览器,所以还需要安装

webdriver-manager

来获取Chrome浏览器驱动。

接下来代码打开了一个文件result_url.text,读取了其中的每一行链接,并通过browser_driver.get()方法在浏览器中打开了该链接,进入相应网页进行操作。然后使用JavaScript代码在当前网页上查找对应的HTML元素,并提取出其中的图片链接。需要注意的是,这里使用正则表达式匹配链接时,对.jpe做了处理,将其替换为.jpeg,这是为了统一链接的格式。在获取到链接后,使用requests包中的get()方法从链接中获取图片的内容,并使用Python内置模块os中的open()方法打开对应路径的文件并将获取到的图片内容写入。在每次写入图片时,代码都使用了time包中的sleep()方法来暂停一秒钟,这是为了避免网络请求过于频繁,导致服务器封禁爬虫。

总的来说,这段Python代码通过结合selenium包和requests包,通过获取网页上的图片链接并下载到本地实现了图片爬取的功能。

import time

# pip install
# webdriver-manager
# selenium
# pyperclip
# pywinauto

# http://datasite.jumpw.com/data/info-heros 此网址F12 console 执行 下面代码得到 如下网址
# var doc_ob=document.querySelector("#hero_box")
# var num =doc_ob.childElementCount
#
# for (let i = 0; i < num; i++) {
#         console.log(doc_ob.children[i].children[0].getAttribute("href"))
#     }
#

head_url="http://datasite.jumpw.com"

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
# 导入keys类包
# import pyperclip
# from pywinauto.keyboard import send_keys

# 合成urls
# url_list=[head_url+i for i in list_url.split()]

# 获取链接的js代码
js_code="""
func (){
var doc_ob = document.querySelector("body > div.index-owl > div.owl-nav.owl-banner > div");
var num =doc_ob.childElementCount;
var url_list=[];
for (let i = 0; i < num; i++) {
        url_list.push(doc_ob.children[i].children[0].children[0].getAttribute("src"))
    };
    return url_list;
    }
"""

# 设置打开浏览器
options = Options()
options.add_argument("--start-maximized")
options.add_experimental_option(
'excludeSwitches', ['enable-logging', 'enable-automation'])
options.add_argument("profile-directory={profile}")
options.add_argument("--incognito")
chrome_dir=r"C:/Users/Administrator/AppData/Local/Google Chrome/Chromebin/chrome.exe"
# chrome = Application(backend='uia')

options.binary_location = chrome_dir

browser_driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
# pyperclip.copy(js_code)

# from pywinauto import Application

# from pywinauto import mouse
# import pyautogui
# import time
# import pyperclip
import requests
import re
with open("result_url.text","r",encoding="utf-8") as f:
   url_list = f.readlines()

for j,i in enumerate(url_list):
    # html=chrome.start(chrome_dir + ' --force-renderer-accessibility --incognito --start-maximized ' + i, timeout=5)
    browser_driver.get(i.strip())
    # num=browser_driver.execute_script("""return document.querySelector("#ssr-content > div._2jN0Z > div > div.EaCvy > div:nth-child(2) > div._2Zphx").outerHTML""")
    # document.querySelector("#app > div > div.app-module_contentWrapper_12u0y > div > div.app-module_leftSection_2GBVu > div.index-module_articleContainer_32gOp > div.index-module_contentContainer_3mQeg > div > div > div > div > div > div > div").outerHTML

    # num=browser_driver.execute_script("""document.querySelector("#app > div > div.app-module_contentWrapper_12u0y > div > div.app-module_leftSection_2GBVu > div.index-module_articleContainer_32gOp > div.index-module_contentContainer_3mQeg > div > div > div > div > div > div > div").outerHTML""")
    try:
        num=browser_driver.execute_script("""return document.querySelector("#app > div > div.app-module_contentWrapper_12u0y > div > div.app-module_leftSection_2GBVu > div.index-module_articleContainer_32gOp > div.index-module_contentContainer_3mQeg > div > div > div > div > div > div > div").outerHTML""")
        ul=re.compile("https\:\/\/pics.{9,61}").findall(num)
        for jj,onl in enumerate(ul):
            if ".jpe" in onl:

                onl=onl.replace(".jpe",".jpeg")
            image = requests.get(onl).content
            with open("E:/tuku/baidu/2_{}_{}.{}".format(j,jj,onl.strip().split(".")[-1]), "wb") as f:
                f.write(image)
            time.sleep(1)

        with open("result_url.txt", "a", encoding="utf-8") as f:
            f.writelines([i+"\r" for i in ul])
    except:
        pass
标签: chrome python 爬虫

本文转载自: https://blog.csdn.net/weixin_32759777/article/details/129337579
版权归原作者 东方佑 所有, 如有侵权,请联系我们删除。

“python selenium 不用下载驱动且能执行js 代码爬取网页”的评论:

还没有评论