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

京东爬取

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.效果图

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬取京东手机销售信息通常涉及网络爬虫技术,使用诸如requests、BeautifulSoup、Scrapy等库来自动化获取网页内容。以下是一个简化的步骤: 1. **安装必要的库**: 首先需要安装`requests`库用于发送HTTP请求,`lxml`或`beautifulsoup4`库用于解析HTML。 ```bash pip install requests beautifulsoup4 ``` 2. **分析网页结构**: 访问京东手机页面,查看HTML结构,找到包含商品信息的部分。比如商品标题、价格、销量等数据通常会封装在特定的HTML标签内。 3. **编写爬虫代码**: 使用Python编写脚本,通过`requests.get()`获取页面源码,然后用选择器(如BeautifulSoup的`select()`或XPath)定位到所需的数据。 ```python import requests from bs4 import BeautifulSoup url = 'https://list.jd.com/' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'lxml') phones_info = soup.select('.product-item') # 假设商品列表在class为'.product-item'的元素下 ``` 4. **提取信息并存储**: 对每个找到的商品信息,解析出对应的属性值,并保存到列表、字典或数据库中。 5. **处理分页和动态加载**: 如果数据分布在多个页面或有滚动加载的情况,可能需要模拟登录、遍历分页链接,甚至使用Selenium等工具处理JavaScript渲染的内容。 6. **注意法律问题**: 网络爬虫在实际操作时需遵守网站的Robots协议,以及京东的使用条款,尊重版权,合理使用数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值