爬虫案例实战

文章目录


一、窗口切换实战

案例实战:使用selenium实现打开百度和腾讯两个窗口并切换

知识点:用到selenium中execute_script()执行js代码及switch_to.window()方法

全部代码如下:

python 复制代码
import time
import warnings
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options


warnings.filterwarnings('ignore')
# 创建ChromeOptions对象
chrome_options = Options()
# 添加启动参数,禁用浏览器自动化控制提示
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

driver = webdriver.Chrome(chrome_options)
driver.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument",
    {
        "source": " Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) "
    }
)
driver.maximize_window()
# 请求第1个网址:driver.get()
driver.get('https://www.baidu.com')
time.sleep(3)

# 请求第2个网址:JS代码
js_code = 'window.open("https://www.qq.com")'
driver.execute_script(js_code)

# 获取窗口
window_list = driver.window_handles

# 切换窗口到百度
driver.switch_to.window(window_list[0])
driver.find_element(by=By.ID, value='kw').send_keys('风景')
driver.find_element(by=By.ID, value='su').click()
time.sleep(2)

# 切换窗口到QQ
driver.switch_to.window(window_list[1])
driver.find_element(by=By.XPATH, value='//*[@id="qqhome-top-header"]/div/div/div[2]/div/input').send_keys('Python')
driver.find_element(by=By.XPATH, value='//*[@id="qqhome-top-header"]/div/div/div[2]/div/button/span').click()
input()

二、京东数据抓取

案例实战:使用selenium实现打开京东搜索商品并滑动页面获取数据

知识点:用到selenium中execute_script()执行js代码

全部代码如下:

python 复制代码
import time
import warnings
from lxml import etree
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

keyword = '手机'
warnings.filterwarnings('ignore')
# 创建ChromeOptions对象
chrome_options = Options()
# 添加启动参数,禁用浏览器自动化控制提示
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

driver = webdriver.Chrome(chrome_options)
driver.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument",
    {
        "source": " Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) "
    }
)
driver.maximize_window()


def requests_url():
    # 访问京东首页
    start_url = r'https://www.jd.com/'
    driver.get(start_url)
    input_data()


def input_data():
    # 输入数据
    driver.find_element(by=By.ID, value='key').send_keys(keyword)
    time.sleep(2)
    driver.find_element(by=By.CLASS_NAME, value='button').click()
    time.sleep(8)
    Down_Scroll()


def Down_Scroll():
    # 控制鼠标滑到底部
    for i in range(1, 11):
        js_code = 'scrollTo(0, {})'.format(i * 600)
        driver.execute_script(js_code)
        time.sleep(1)
    time.sleep(3)
    get_goods_info()


def get_goods_info():
    # 解析响应
    response = driver.page_source
    html_xpath = etree.HTML(response)
    li_list = html_xpath.xpath('//div[@id="J_goodsList"]/ul/li')
    for li in li_list:
        # 1、商品标题
        goods_name_1 = li.xpath(r'.//div[@class="p-name p-name-type-2"]/a/em/text()')
        goods_name_2 = li.xpath(r'.//div[@class="p-name p-name-type-2"]/a/@title')
        goods_name = goods_name_1 if goods_name_1 != [] else goods_name_2
        goods_name = ''.join(goods_name).replace('\n', '').replace(' ', '').replace('	', '')
        # 2、卖家名字
        sale_name = li.xpath(r'.//a[@class="curr-shop hd-shopname"]/@title')
        sale_name = ''.join(sale_name)
        # 3、商品价格
        goods_price = li.xpath(r'.//div/div[2]/strong/i/text()')
        goods_price = ''.join(goods_price)
        if goods_name != '':
            print(goods_name, sale_name, goods_price, sep=' | ')


def main():
    requests_url()
    input()


if __name__ == '__main__':
    main()
相关推荐
smchaopiao22 分钟前
Python中字典与列表合并的问题与解决方法
开发语言·python
卡尔特斯32 分钟前
Ultralytics YOLO26 自动对指定标注文件夹区分标注素材脚本与训练脚本
python·openai
2501_9216494941 分钟前
期货 Tick 级数据与基金净值历史数据 API 接口详解
开发语言·后端·python·websocket·金融·区块链
njidf1 小时前
实战:用Python开发一个简单的区块链
jvm·数据库·python
Rick19931 小时前
慢SQL优化
数据库·python·sql
gc_22991 小时前
学习python使用Ultralytics的YOLO26进行分割的基本用法
python·分割·ultralytics·yolo26
kronos.荒1 小时前
搜索二维矩阵中的target——二分查找或者二叉搜索树(python)
python·矩阵·二分查找
源码之家2 小时前
计算机毕业设计:基于Python的美食推荐分析系统 Django框架 爬虫 协同过滤推荐算法 可视化 推荐系统 数据分析 大数据(建议收藏)✅
爬虫·python·机器学习·django·flask·课程设计·美食
2301_814590252 小时前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
sun_tao12 小时前
LlamaIndex + Qwen3.5-4B 关闭 Thinking 模式调试记录
python·llamaindex·qwen3.5-4b·huggingfacellm