python爬虫之滑动滚轮动态加载内容爬取--京东案例

京东爬虫案例

  • 目标
1、目标网址 :https://www.jd.com/
2、抓取目标 :商品名称、商品价格、评价数量、商品商家
  • 思路提醒
1、打开京东,到商品搜索页
2、匹配所有商品节点对象列表
3、把节点对象的文本内容取出来,查看规律,是否有更好的处理办法?
4、提取完1页后,判断如果不是最后1页,则点击下一页
   # 如何判断是否为最后1页???
对于滑动滚轮动态加载数据的内容,爬取思路:
	利用selenium+phantomjs/Chrome/Firefox,打开页面后,将滚动条拉到最下面,然后等页面加载出来,进行爬取。这种爬取方法效率比较慢,但是基本上网站的内容都可以爬取。

附selenium+phantomjs/Chrome/Firefox安装教程:https://blog.csdn.net/weixin_44706011/article/details/103550730

  • 实现步骤
  1. 找节点
1、首页搜索框 : //*[@id="key"]
2、首页搜索按钮   ://*[@id="search"]/div/div[2]/button
3、商品页的 商品信息节点对象列表 ://*[@id="J_goodsList"]/ul/li
  1. 执行JS脚本,获取动态加载数据
# 将滚动条拉到最下面
browser.execute_script(
    'window.scrollTo(0,document.body.scrollHeight)'
)
  1. 代码实现
'''
    抓取京东商品信息---->selenium+chrome
'''

from selenium import webdriver
import time


class JDSpider(object):
    def __init__(self):
        self.browser = webdriver.Chrome()
        self.url = 'https://www.jd.com/'
        self.count = 0

    # 获取商品页面
    def get_page(self):
        # 打开京东
        self.browser.get(self.url)
        # 找两个节点
        # 输入搜索内容
        self.browser.find_element_by_xpath('//*[@id="key"]').send_keys('人工智能书籍')
        # 点击搜索
        self.browser.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
        # 留出时间给页面加载
        time.sleep(2)

    # 解析页面
    def parse_page(self):
        # 把进度条拉到最下面
        # 执行js脚本,将下拉条拉到最下面
        self.browser.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )

        #  匹配所有商品节点对象列表
        li_list = self.browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li')
        for li in li_list:
        	# 遍历商品列表,将一些特殊数据做处理
            info = li.text.split('\n')
            if info[0].startswith('每满'):
                price = info[1]
                name = info[2]
                number = info[3]
                market = info[4]
            elif info[0] == '单件':
                price = info[3]
                name = info[4]
                number = info[5]
                market = info[6]
            elif info[0].startswith('¥') and info[1].startswith('¥'):
                price = info[0]
                name = info[2]
                number = info[3]
                market = info[4]
            else:
                price = info[0]
                name = info[1]
                number = info[2]
                market = info[3]
            print(price, number, market, name)
            self.count += 1

    def main(self):
        self.get_page()
        while True:
            self.parse_page()
            # 判断是否为最后一页
            # 不是最后一页,点击下一页
            if self.browser.page_source.find('pn-next disabled') == -1:
                # 不是最后一页,找到下一页的按钮
                self.browser.find_element_by_class_name('pn-next').click()
                time.sleep(5)
            # 如果是最后一页,break退出
            else:
                break
        print(self.count)


if __name__ == "__main__":
    spider = JDSpider()
    spider.main()

chromedriver设置无界面模式

from selenium import webdriver

options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')

附git地址:https://github.com/RyanLove1/spider_code

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于爬取动态加载的页面,可以使用 Selenium 库来模拟浏览器的操作。以下是一个简单的示例,展示了如何使用 Selenium 进行动态页面的爬取: 首先,确保已安装 Selenium 库: ``` pip install selenium ``` 然后,根据你使用的浏览器,下载对应的 WebDriver。比如,如果你使用的是 Chrome 浏览器,可以前往 Chrome WebDriver 官网(https://sites.google.com/a/chromium.org/chromedriver/)下载对应版本的 WebDriver。 接下来,编写 Python 代码: ```python from selenium import webdriver # 声明并初始化一个 WebDriver 对象 # 这里以 Chrome 浏览器为例,需要指定 Chrome WebDriver 的路径 driver = webdriver.Chrome('/path/to/chromedriver') # 访问目标网页 driver.get('https://example.com') # 执行一些操作,模拟用户交互 # ... # 获取页面源代码,包含动态加载内容 html = driver.page_source # 关闭 WebDriver driver.quit() # 处理获取到的页面源代码 # ... ``` 在代码中,首先创建了一个 WebDriver 对象,并指定了 WebDriver 的路径。然后使用 `get()` 方法访问目标网页。 接下来,你可以执行一些模拟用户交互的操作,例如点击按钮、填写表单等等,以加载动态内容。 最后,使用 `page_source` 属性获取页面的源代码,其中包含了动态加载内容。你可以根据需要对获取到的源代码进行处理,提取你感兴趣的信息。 最后别忘了关闭 WebDriver,以释放资源。 希望这个示例能够帮助你入门动态页面的爬取!如果有更多问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值