爬取动态加载 & selenium & 无头Chrome

爬取动态加载 & selenium & 无头Chrome

实例:
import requests
import os
import re
from selenium import webdriver
from time import sleep
from lxml import etree
from multiprocessing.dummy import Pool

def get_date(num):
        option = webdriver.FirefoxOptions()
        option.add_argument('--headless')
        browser = webdriver.Firefox(options=option)
        #browser = webdriver.Firefox()
        browser.get('https://huaban.com/boards/'+str(c)+'/')
        if num == 0:
                date = browser.page_source
                browser.quit()
                return(date)
        else:
                for i in range(num):
                        browser.execute_script('window.scrollTo(0,10240)')
                        sleep(1)
                date = browser.page_source
                browser.quit()
                return(date)

def get_url(url):
        url = 'https://huaban.com'+url
        req = requests.get(url)
        img_url = re.findall('"key":"(.*?)", "type":"image/jpeg", "height":',req.text)[0]
        img_url = 'http://hbimg.huabanimg.com/'+ img_url
        save_img(img_url)
            
def save_img(url):
        name = url[-30:-13]
        print(url)
        date = requests.get(url)
        with open(b+'/'+name+'.jpg', 'wb') as f:
            f.write(date.content)  

####开始####
if __name__ == '__main__':
        c = int(input('输入链接码: '))
        a = int(input('输入下载的页数: '))
        b = input('创建目录名: ')
        os.makedirs(b)
        list_old=[]
        list=[]
        for i in range(a):
                date = get_date(i)
                soup = etree.HTML(date)
                list_old += soup.xpath('//*[@id="waterfall"]/div/a/@href')
        for i in list_old:
                if i not in list:
                        list.append(i)
        pool = Pool(4)
        pool.map(get_url,list)
        pool.close()
        pool.join()
        print('\n'+'....下载完成....')
谷歌浏览器的驱动下载地址:
http://chromedriver.storage.googleapis.com/index.html
使用selenium打开百度
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome('./chromedriver.exe')
driver.get('http://www.baidu.com')
# 查找页面的“设置”选项,发送一个你要搜索的值,并进行点击
driver.find_element_by_id('kw').send_keys('人民币')
sleep(2)
#并进行点击
driver.find_element_by_id('su').click()
sleep(2)
#退出驱动程序
driver.quit()
#使用下面的方法,查找指定的元素进行操作即可
    find_element_by_id            根据id找节点
    find_elements_by_name         根据name找
    find_elements_by_xpath        根据xpath查找
    find_elements_by_tag_name     根据标签名找
    find_elements_by_class_name   根据class名字查找
无头Chrome
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

#这个是一个用来控制chrome以无界面模式打开的浏览器
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

#驱动路径 谷歌的驱动存放路径
path = './chromedriver.exe'
#创建浏览器对象
browser = webdriver.Chrome(executable_path=path,options=chrome_options)

url ='http://www.baidu.com/'

browser.get(url)
time.sleep(3)
#截图当前页
browser.save_screenshot('baid.png')

browser.quit()
你可以使用Selenium爬取淘宝商品信息。下面是一个简单的示例代码,演示了如何使用Selenium在Python中进行淘宝商品信息爬取: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 设置Chrome浏览器的驱动路径 driver_path = 'path/to/chromedriver' # 初始化Chrome浏览器 options = webdriver.ChromeOptions() options.add_argument('--headless') # 无头模式,不显示浏览器界面 driver = webdriver.Chrome(executable_path=driver_path, options=options) # 打开淘宝商品页面 driver.get('https://www.taobao.com/') # 定位搜索框并输入关键字 search_input = driver.find_element(By.CSS_SELECTOR, '#q') search_input.send_keys('商品关键字') # 点击搜索按钮 search_button = driver.find_element(By.CSS_SELECTOR, '.btn-search') search_button.click() # 等待搜索结果加载完成 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.JIIxO.m-itemlist'))) # 解析搜索结果并提取商品信息 items = driver.find_elements(By.CSS_SELECTOR, '.JIIxO.m-itemlist .JIIxO.m-itemlist .JIIxO') for item in items: title = item.find_element(By.CSS_SELECTOR, '.title').text price = item.find_element(By.CSS_SELECTOR, '.price').text print(f'商品名称:{title},价格:{price}') # 关闭浏览器 driver.quit() ``` 请注意,这只是一个简单的示例代码,实际应用中可能需要更多的处理和错误处理。此外,淘宝网站有一些反爬虫机制,因此在实际使用时需要注意遵守相关规定,避免被封禁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值