Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >selenium+phantomjs爬取

selenium+phantomjs爬取

作者头像
py3study
发布于 2020-01-16 07:42:52
发布于 2020-01-16 07:42:52
66800
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

selenium+phantomjs爬取京东商品信息

今天自己实战写了个爬取京东商品信息,和上一篇的思路一样,附上链接:https://www.cnblogs.com/cany/p/10897618.html

打开 https://www.jd.com/ 首先不需要登陆就可搜索,淘宝不一样,所以淘宝我还没试过。

开启F12 定位一下搜索框和搜索按钮

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input = WAIT.until(EC.presence_of_element_located((By.XPATH,'//*[@id="key"]')))
        submit = WAIT.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="search"]/div/div[2]/button')))
        input.send_keys(goods)
        submit.click()

接下来我们要的是按销量排名,那就要点击这个 onclick事件

发现使用click()还是无法进行点击,因为这是个js跳转 所以得用下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
submit_js = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="J_filter"]/div[1]/div[1]/a[2]')))
browser.execute_script("$(arguments[0]).click()", submit_js)

接下来就还是检测是否加载了下面的元素

开始分析各项 怎么获取里面的数据就不说了

这时候可能爬的不完全,因为京东是动态加载的 需要去模拟一下把页面拉到底部

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")

按照这样子进行循环遍历,把每一个值添加到goods_data列表里去,但也保证不了可能会出现找不到对象的属性,抛出AttributeError异常,这里已经尝试过了,所以写下这个异常处理!

然后获取完一页就下一页,然后得写个代码来检查是否跳转到指定页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WAIT.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.curr'),str(page_num)))

再获取每一页当前页面源码进行解析提取内容,保存到 goods_data 列表中,最后写入xls文件!

Tips:里面sleep 时间视情况而定,太快会导致获取不全,但如果网速快能弥补这一点,目前测试情况来看是这样子的问题!

附上代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import xlwt
import time


goods = input('请输入你要爬取的商品名称:')
goods_data = []
browser = webdriver.PhantomJS()
WAIT = WebDriverWait(browser,10)
browser.set_window_size(1000,600)


def seach(goods):
    try:
        print('开始自动化爬取京东商品信息......')
        browser.get('https://www.jd.com/')
        input = WAIT.until(EC.presence_of_element_located((By.XPATH,'//*[@id="key"]')))
        submit = WAIT.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="search"]/div/div[2]/button')))
        input.send_keys(goods)
        submit.click()
        submit_js = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="J_filter"]/div[1]/div[1]/a[2]')))
        browser.execute_script("$(arguments[0]).click()", submit_js)
        time.sleep(1)
        get_source()
    except TimeoutException:
        return seach(goods)


def get_source():
    browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    time.sleep(1)
    WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList > ul')))
    html = browser.page_source
    soup = BeautifulSoup(html,'lxml')
    save_data(soup)


def save_data(soup):
    html = soup.find_all(class_='gl-i-wrap')
    for item in html:
        try:
            goods_name = item.find(class_='p-name').find('em').text
            goods_link = 'https:' + item.find(class_='p-img').find('a').get('href')
            goods_evaluate = item.find(class_='p-commit').text
            goods_store = item.find(class_='curr-shop').text
            goods_money = item.find(class_='p-price').find('i').text
            print(('爬取: ' + goods_name))
            goods_data.append([goods_name,goods_link,goods_evaluate,goods_store,goods_money])
        except AttributeError:
            pass


def next_page(page_num):
    try:
        print('获取下一页数据')
        next_btn = WAIT.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.pn-next')))
        next_btn.click()
        WAIT.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.curr'),str(page_num)))
        get_source()
    except TimeoutException:
        browser.refresh()
        return next_page(page_num)


def save_to_excel():
    book = xlwt.Workbook(encoding='utf-8', style_compression=0)
    sheet = book.add_sheet(goods, cell_overwrite_ok=True)
    sheet.col(0).width = 256 * 80
    sheet.col(1).width = 256 * 40
    sheet.col(2).width = 256 * 20
    sheet.col(3).width = 256 * 25
    sheet.col(4).width = 256 * 20
    sheet.write(0, 0, '商品名称')
    sheet.write(0, 1, '商品链接')
    sheet.write(0, 2, '评价人数')
    sheet.write(0, 3, '店名')
    sheet.write(0, 4, '价格')
    for item in goods_data:
        n = goods_data.index(item) + 1
        sheet.write(n, 0, item[0])
        sheet.write(n, 1, item[1])
        sheet.write(n, 2, item[2])
        sheet.write(n, 3, item[3])
        sheet.write(n, 4, item[4])
    book.save(str(goods) + u'.xls')


def main():
    try:
        seach(goods)
        for i in range(2,11):
            next_page(i)
        print('-'*50)
        print('数据爬取完毕,正在写入xls.....')
        save_to_excel()
        print('写入成功!!!')
    finally:
        browser.close()
        browser.quit()


if __name__ == '__main__':
    main()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
selenium+pyquery爬取淘宝
import re from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutExce
py3study
2020/01/19
4350
爬虫学习笔记:Selenium爬取淘宝美食 附完整代码
淘宝的页面也是通过Ajax来抓取相关数据,但是参数比较复杂,甚至包含加密秘钥。使用selenium来模拟浏览器操作,抓取淘宝商品信息,即可做到可见即可爬。
松鼠先生
2022/02/22
1.1K0
爬虫学习笔记:Selenium爬取淘宝美食   附完整代码
python用selenium驱动浏览器爬取天府新区二手房房价--并展示在网页上
3,web 应用测试工具selenium库: pip install selenium
小末快跑
2019/07/03
5480
四、请求库之selenium模块
一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 from selenium import webdriver browser=webdriver.Chrome() browser=webdriver.Firefox() browser=webdriver.PhantomJS() b
用户1214487
2018/01/24
3.1K0
使用Selenium爬取淘宝商品
在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取。比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可能会包含加密密钥等,所以如果想自己构造Ajax参数,还是比较困难的。对于这种页面,最方便快捷的抓取方法就是通过Selenium。本节中,我们就用Selenium来模拟浏览器操作,抓取淘宝的商品信息,并将结果保存到MongoDB。 1. 本节目标 本节中,我们要利用Selenium抓取淘宝商品并用pyquer
崔庆才
2018/06/25
3.9K0
python实战
这个实战内容包含,selenium、pyquery、re、pymongo pymongo安装去这里:https://blog.51cto.com/13155409/2125020 实战抓取淘宝美食信息并且存入MongoDB数据库中
py3study
2020/01/07
5120
Python爬虫-selenium
对于Ajax加载的网页已经分析了好几回,这回来说说利用selenium自动化获取网页信息。
小F
2020/10/09
8350
Python爬虫-selenium
Selenium 抓取淘宝商品
本文介绍了如何利用Python3和Selenium爬取淘宝商品信息并保存到MongoDB。首先介绍了淘宝商品页面的HTML结构,然后利用BeautifulSoup和Selenium对商品信息进行了爬取。最后通过MongoDB的PyMongo驱动将商品信息保存到MongoDB中。
崔庆才
2017/08/07
3K0
Selenium 抓取淘宝商品
Python爬虫项目--爬取某宝男装信息
1) 找到对应的URL, URL里的参数正是Query String Parameters的参数, 且请求方式是GET
py3study
2020/01/19
9440
Python爬虫项目--爬取某宝男装信息
网络爬虫 | selenium 爬取动态加载信息
使用selenium实现动态渲染页面的爬取。selenium是浏览器自动测试框架,模拟浏览器,驱动浏览器执行特定的动作,并可获取浏览器当前呈现的页面的源代码,可见即可爬。该工具支持IE浏览器、Mozilla Firefox及Google Chrome等。
数据STUDIO
2021/06/24
1.3K0
爬取淘宝数据
屿.
2024/10/31
2700
selenium 爬取淘宝相关数据
此程序使用selenium 爬取淘宝相关数据,爬取过程需要扫码登录一下,并且最终将数据存入json文件,爬取时间大概在几分钟左右
码农GT038527
2024/09/16
3070
selenium 爬取淘宝相关数据
Python教程:selenium模块用法教程
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题
Python学习者
2023/02/07
2K0
selenium使用
pip insatll selenium 由于如果需要使用selenium的话,需要为本机配置对应浏览器的驱动,下面以chomedriver为例,首先安装chromedriver,chrome版本可以在标签页输入chrome://version/看到。chromedriver下载地址,其版本与支持对应的chrome版本如下: v2.41 v67-69 v2.40 v66-68 v2.39 v66-68 v2.38 v65-67 v2.37 v64-66 v2.36 v63-65 v2.35 v62-64 v2.34 v61-63 v2.33 v60-62 v2.32 v59-61 v2.31 v58-60 v2.30 v58-60 v2.29 v56-58 v2.28 v55-57 v2.27 v54-56 v2.26 v53-55 v2.25 v53-55 v2.24 v52-54 v2.23 v51-53 v2.22 v49-52 v2.21 v46-50 v2.20 v43-48 chromedriver解压后放到Python或者其他配置了环境变量的目录下。
听城
2018/08/30
1.1K0
深入selenium三种等待方式使用
from selenium.webdriver.support.wait import WebDriverWait
小小咸鱼YwY
2019/09/11
5.3K0
爬虫之selenium
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 有了selenium能够实现可见即可爬 -使用(本质,并不是python在操作浏览器,而是python在操作浏览器驱动(xx.exe),浏览器驱动来驱动浏览器) -0 以驱动谷歌浏览器为例子(建议你用谷歌,最合适)找谷歌浏览器驱动 -0 如果是windows,解压之后是个exe,不同平台就是不同平台的可执行文件 -1 安装模块:pip3 install selenium -2 需要浏览器驱动(ie,火狐,谷歌浏览器。。。。驱动得匹配(浏览器匹配,浏览器版本跟驱动匹配)) -3 写代码
GH
2020/03/19
1.9K0
python爬虫从入门到放弃(八)之 Selenium库的使用
本文主要介绍了如何通过Python的Selenium库来自动化操作浏览器,包括打开浏览器、输入网址、获取页面元素、模拟用户操作等。同时,还介绍了如何通过调用JavaScript来实现更复杂的操作。
coders
2018/01/04
3.2K0
python爬虫从入门到放弃(八)之 Selenium库的使用
Python 自动化,Helium 凭什么取代 Selenium?
Helium 是一款 Web 端自动化开源框架,全称是:Selenium-Python-Helium,从名字上就可以看出,Helium 似乎和 Selenium 息息相关
AirPython
2020/08/22
1.9K0
淘宝数据分析实战:美食霸榜销量No.1的竟然是....
想必大家都喜欢囤货吧,小编购物车里全是加购的零食,闲来无事,就顺手爬了淘宝搜索美食出来的商品信息,简单做了个分析,借此案例给大家学习参考。
1480
2020/02/19
5010
爬虫selenium+chromdriver
由于requests模块是一个不完全模拟浏览器行为的模块,只能爬取到网页的HTML文档信息,无法解析和执行CSS、JavaScript代码,因此需要我们做人为判断;
菲宇
2019/06/11
2.5K0
相关推荐
selenium+pyquery爬取淘宝
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验