爬虫实现翻页功能

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

import time

import json

import csv

import random

# 声明一个谷歌驱动器,并设置不加载图片,间接加快访问速度

options = webdriver.ChromeOptions()

options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})

browser = webdriver.Chrome(options=options)

# url

url = 'https://www.jd.com/'

# 声明一个list,存储dict

data_list = []

def start_spider():

# 请求url

browser.get(url)

# 获取输入框的id,并输入关键字python爬虫

browser.find_element_by_id('key').send_keys('python爬虫')

# 输入回车进行搜索

browser.find_element_by_id('key').send_keys(Keys.ENTER)

# 显示等待下一页的元素加载完成

WebDriverWait(browser, 1000).until(

EC.presence_of_all_elements_located(

(By.CLASS_NAME, 'pn-next')

)

)

# 先获取一个有多少页

all_page = eval(browser.find_element_by_css_selector('span.p-skip em b').text)

print(all_page)

# 设置一个计数器

count = 0

# 无限循环

while True:

try:

count += 1

# 显示等待商品信息加载完成

WebDriverWait(browser, 1000).until(

EC.presence_of_all_elements_located(

(By.CLASS_NAME, 'gl-item')

)

)

# 将滚动条拉到最下面的位置,因为往下拉才能将这一页的商品信息全部加载出来

browser.execute_script('document.documentElement.scrollTop=10000')

# 随机延迟,等下元素全部刷新

time.sleep(random.randint(1, 3))

browser.execute_script('document.documentElement.scrollTop=0')

# 开始提取信息,找到ul标签下的全部li标签

lis = browser.find_elements_by_class_name('gl-item')

# 遍历

for li in lis:

# 名字

name = li.find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text

# 价格

price = li.find_element_by_xpath('.//div[@class="p-price"]//i').text

# 评论数

comment = li.find_elements_by_xpath('.//div[@class="p-commit"]//a')

if comment:

comment = comment[0].text

else:

comment = None

# 商铺名字

shop_name = li.find_elements_by_class_name('J_im_icon')

if shop_name:

shop_name = shop_name[0].text

else:

shop_name = None

# 商家类型

shop_type = li.find_elements_by_class_name('goods-icons')

if shop_type:

shop_type = shop_type[0].text

else:

shop_type = None

# 声明一个字典存储数据

data_dict = {}

data_dict['name'] = name

data_dict['price'] = price

data_dict['comment'] = comment

data_dict['shop_name'] = shop_name

data_dict['shop_type'] = shop_type

data_list.append(data_dict)

print(data_dict)

except Exception as e:

continue

# 如果count==all_page就退出循环

if count == all_page:

break

# 找到下一页的元素pn-next

fp_next = browser.find_element_by_xpath('//*[@id = "J_bottomPage"]/span[1]/a[9]/em')

#fp_next = browser.find_element_by_css_selector('a.fp-next')

# 点击下一页

fp_next.click()

def main():

start_spider()

# 将数据写入jsonwenj

# with open('data_json.json', 'a+', encoding='utf-8') as f:

# json.dump(data_list, f, ensure_ascii=False, indent=4)

# print('json文件写入完成')

#

# with open('data_csv.csv', 'w', encoding='utf-8', newline='') as f:

# # 表头

# title = data_list[0].keys()

# # 声明writer

# writer = csv.DictWriter(f, title)

# # 写入表头

# writer.writeheader()

# # 批量写入数据

# writer.writerows(data_list)

# print('csv文件写入完成')

if __name__ == '__main__':

main()

# 退出浏览器

browser.quit()

python模拟点击下一页_爬虫模拟点击下一页selenium相关推荐

  1. python如何暂停脚本弹出对话框_如何在点击时暂停pyautogui脚本?

    我想让我的脚本Pyautogui暂停当用户点击并显示一个对话框或重新点击继续在最后一行暂停.在 我尝试了不同的测试,但没有成功.在 我主要用Queue测试当用户输入"Space"时 ...

  2. python爬虫模拟浏览器的两种方法_python爬虫模拟浏览器访问-User-Agent过程解析

    这篇文章主要介绍了python爬虫模拟浏览器访问-User-Agent过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 模拟浏览器访问-Use ...

  3. svn忽略指定文件夹下的文件_管理SteamLibrary文件夹下的acf文件

    管理SteamLibrary文件夹下的acf文件 众所周知,steam中下载的游戏会在SteamLibrarysteamappscommon文件夹下创建一个以游戏名称为名的文件夹用来存放文件,并在St ...

  4. python爬取js动态网页_Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium

    selenium--自动化测试工具,专门为Web应用程序编写的一个验收测试工具,测试其兼容性,功能什么的.然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏览器获得的解析JavaScript的能力. ...

  5. python 爬虫模拟点击_爬虫——模拟点击动态页面

    动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/u ...

  6. python 爬虫爬不出来_爬虫爬不进下一页了,怎么办

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #-*- coding: UTF-8 -*- import scrapy from hoho.items import HohoItem import r ...

  7. python编程课程是骗人的吧_在朋友圈买下编程课,你上的是Python还是成功学

    原标题:在朋友圈买下编程课,你上的是Python还是成功学

  8. python selenium 点击加载更多_如何等待页面加载,然后按selenium中的“加载更多”按钮?...

    你可能会在页面底部看到谷歌广告.在from selenium import webdriver from selenium.webdriver.common.by import By from sel ...

  9. python电影评论的情感分析流浪地球_爬虫实例 | Python爬取《流浪地球》豆瓣影评与数据分析(下)...

    [芝麻IP代理]三.数据分析与可视化 1.获取cookies 城市信息筛选中文字 匹配pyecharts支持的城市列表 2.基于snownlp的情感分析 关于snownlp的作用,主要可以进行中文分词 ...

最新文章

  1. 整个世界都是你的绿幕:这个视频抠图换背景的方法着实真假难辨
  2. 胡渊鸣的「太极图形」又融了5000万美元,接下来推出3D内容创作平台
  3. Cloudify — REST Plugin
  4. MQ的引言|不同MQ的特点|RabbitMQ安装
  5. 《模式识别与机器学习》学习笔记:2.2 多项变量
  6. Mysql学习总结(10)——MySql触发器使用讲解
  7. C#操作Excel的OLEDB方式与COM方式比较
  8. 怎么运行c语言_C语言 原来是这样调用硬件的
  9. 连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?
  10. CSS基础必备知识点05
  11. 分享我用cnode社区api做微信小应用的入门过程
  12. 计算机组成原理(微课版)谭志虎pdf资源
  13. 计算机面试 OA 试题及答案,办公自动化题库OA(附答案)
  14. armeabi与armeabi-v7a的区别,绝对干货!
  15. Java实践练习判断变量x是奇数还是偶数
  16. 靶机渗透练习81-Momentum:2
  17. 计算机怎么转换英语版本,电脑英文字母大小写怎么转换
  18. 一种基于STM32F1 MCU的增量型编码器测速的方法
  19. Arction图表控件LightningChart振动分析可以检测什么?
  20. 学习opencv:PS滤镜—曝光过度

热门文章

  1. Js WebSocket简单抽象类实现
  2. Android AP侧和Modem侧日志时间差异大
  3. 为网络加速 LOTWARE广域网加速解决方案
  4. model.evaluate检验
  5. 腾讯云+社区沙龙·小程序敏捷开发实战(北京)开启报名
  6. EVPN小实验:集中式EVPN网关配置
  7. 【Linux实时编程之CPU核心隔离】Linux(ubuntu)下CPU隔离的踩坑与实践 (isolcpus的使用)
  8. 实验室可以训练(De)CLIP了!商汤ICLR2022 DeCLIP正式开源!
  9. awk 打印单引号和双引号
  10. 企业能否自建物联网卡管理平台