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

动态爬取京东之---selenium+beautifulsoup+xpath提取

程序员文章站 2023-01-25 14:50:41
京东爬取1.思路1.通过selenium中的webdriver来进入需要爬取的物品输入框2.由于是动态页面无法直接提取信息,所以需要通过写入js代码来模拟下拉操作3.通过bs4中的beautifulsoup来采集信息(我更喜欢xpath)4.通过启动模拟点击下一页按钮来实现跳转下页功能2.代码展示#!/usr/bin/python# -*- coding: utf-8 -*-import timefrom selenium import webdriverfrom selenium.w...

京东爬取

1.思路

1.通过selenium中的webdriver来进入需要爬取的物品输入框
2.由于是动态页面无法直接提取信息,所以需要通过写入js代码来模拟下拉操作
3.通过bs4中的beautifulsoup来采集信息(我更喜欢xpath)
4.通过启动模拟点击下一页按钮来实现跳转下页功能

2.代码展示

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')

#打开目标网址
search = input('请输入要搜索的商品:')
driver = webdriver.Chrome(executable_path='chromedriver.exe',chrome_options=chrome_options)#声明谷歌浏览器对象
first_url = 'https://www.jd.com/' #入口url
driver.get(first_url)
# driver.maximize_window() #窗口最大化
#找到搜索框
driver.find_element_by_xpath('//*[@id="key"]').clear()
#传入商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(search)
#搜索商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(Keys.ENTER)
index = 0

for page in range(1,6):
    # 声明基础高度
    height = 0
    for i in range(1, 11):
        js = 'var q=document.documentElement.scrollTop=%s' % height
        height += 800
        driver.execute_script(js)
        time.sleep(1)
    # 利用bs4采集相关信息
    text = driver.page_source
    soup = bs(text, 'html.parser')
    lis = soup.find_all('li', class_='gl-item')

    for li in lis:
        print("*"*100)
        index += 1
        print(li.find('div',class_='p-price').text.strip())
        print(li.find('div', class_='p-name').text.strip())
        print(li.find('div', class_='p-shop').text.strip())
        print('http:'+li.find('div', class_='p-img').a.img.attrs['src'])
    time.sleep(3)
    driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a')[-1].click()

print('总数据总量{}条'.format(index))

3.代码详解

#打开目标网址
search = input('请输入要搜索的商品:')
driver = webdriver.Chrome(executable_path='chromedriver.exe',chrome_options=chrome_options)#声明谷歌浏览器对象
first_url = 'https://www.jd.com/' #入口url
driver.get(first_url)
# driver.maximize_window() #窗口最大化
#找到搜索框
driver.find_element_by_xpath('//*[@id="key"]').clear()
#传入商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(search)
#搜索商品
driver.find_element_by_xpath('//*[@id="key"]').send_keys(Keys.ENTER)

这些代码是通过selenium来获取商品的详情页,其中下面三行代码是为了加快爬取速度而采取无头模式。(执行过程不显示)

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
# 声明基础高度
    height = 0
    for i in range(1, 11):
        js = 'var q=document.documentElement.scrollTop=%s' % height
        height += 800
        driver.execute_script(js)
        time.sleep(1)

这些代码是通过js修改下拉框的参数从而模拟下拉操作。

# 利用bs4采集相关信息
    text = driver.page_source
    soup = bs(text, 'html.parser')
    lis = soup.find_all('li', class_='gl-item')

    for li in lis:
        print("*"*100)
        index += 1
        print(li.find('div',class_='p-price').text.strip())
        print(li.find('div', class_='p-name').text.strip())
        print(li.find('div', class_='p-shop').text.strip())
        print('http:'+li.find('div', class_='p-img').a.img.attrs['src'])

这些事通过bs4,来获取需要的数据

driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a')[-1].click()
driver.find_elements_by_xpath('//*[@id="J_bottomPage"]/span[1]/a')[-1].send_keys(Keys.RETURN)

以上两种选择其中一个来实现跳转页功能,外面还有一个循环来实现页数的控制,第一个直接通过点击,第二个是通过模拟键盘的右方向键。

4.效果图

动态爬取京东之---selenium+beautifulsoup+xpath提取

动态爬取京东之---selenium+beautifulsoup+xpath提取

本文地址:https://blog.csdn.net/ZXCNIUBI/article/details/107579190

相关标签: 爬虫 selenium