selenium实现动态网页爬取

# 动作链
# 反爬的一种手段,通过移动图片来进行反爬
from selenium import webdriver  # 声明一个浏览器对象
from selenium.webdriver import ActionChains
import time
import pandas as pd
from bs4 import BeautifulSoup
from selenium.webdriver.common.alert import Alert
# 和上面的结果一样
# 无界面显示
# 如果不打开网页界面,则下面添加下面两行,如果需要显示,则注释掉即可

chrome_options = webdriver.ChromeOptions()  # 定义一个对象
chrome_options.add_argument('--headless')  # 无界面显示

# 爬取京东商品,多页
browser = webdriver.Chrome(chrome_options=chrome_options)
url = 'https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_1e919057477d404cbad2c4880ced4af4'
browser.get(url)
browser.maximize_window() # 最大化
input = browser.find_element_by_id('key')
input.clear()
input.send_keys('手机')
browser.find_element_by_class_name('button').click()# 回车

# 上面的网址,打开方式都是一样的,所以不用每次都打开
#  数据保存
datalist = []

for i in range(5): # 循环5次爬取5页
    print('正在爬取第%d页'%(i + 1))

    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') # 下拉进度条
    time.sleep(10)
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    time.sleep(10)
    html = browser.page_source # 获取网页的源码

    soup = BeautifulSoup(html, 'html.parser') # 内置的标准库对网页解析
    # 查找所有的元素
    li = soup.find_all(name='li', class_ ='gl-item')

    # 储存数据

    for ll in li:
        # 标题
        title = ll.find('div','p-name').em.text

        # 价格
        price = ll.find('div','p-price').i.text

        #店铺名字
        if ll.find('span','J_im_icon') == None:
            
            shop_name = '京东自营'
        else:
            shop_name = ll.find('span','J_im_icon').text.strip()

        # 数据保存
        datalist.append([title, price, shop_name])
    browser.execute_script('window.scrollTo(0,10000)')  #当爬完所有的数据后,将浏览器上升到y轴10000的地方,因为下一页的按钮就在10000附近
    time.sleep(5)
    browser.find_element_by_class_name('pn-next').click()# 找到下一页的按钮并且点击
    time.sleep(5)

print('爬取完成')
df = pd.DataFrame(datalist, columns=['标题', '价格', '店铺名字'])
df.to_csv('./京东手机浏览页.csv',index = False)
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半两风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值