淘宝的html是动态加载的,直接用requests请求并不能找到想要的数据,这里用selenium库模拟浏览器登录并操作

导库

from selenium import webdriver

淘宝的url

url ='https://www.taobao.com/'
browser = webdriver.Chrome()
browser.get(url)

用css选择器获取淘宝搜索框并输入“书籍”(也可以输入其他的关键字,网页的结构一样的)

inputs = browser.find_element_by_css_selector('#q')
inputs.send_keys('书籍')

找到搜索键,并点击

submit = browser.find_element_by_css_selector('#J_TSearchForm > div.search-button > button')
submit.click()

模拟翻页,找到‘到【】页’的搜索框,清空页码值,并增加页码的值,最后找到‘确定’键点击,实现翻页

inputs1 = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > input')
inputs1.clear()
page_num = 2
inputs1.send_keys(page_num)
submit1 = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')
submit1.click()

上述代码表示翻到第2页

bookname = browser.find_elements_by_css_selector('.J_ClickStat')
print(bookname)

成功返回html,是list的格式

查看找到的书名

for name in bookname:print(name.text)

返回成功

同样的方式找到书籍的价格信息

price = browser.find_elements_by_css_selector('strong')
#print(price)
for price in price:print(price.text)

返回成功

获取单页的html,并抓取书籍的书店名字,书店的地点,书籍的价格,书籍的销量

定义获取单页的函数,解析html,放在字典的生成器中

def get_one_page(page_num):inputs1 = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > input')inputs1.clear()page_num = page_numinputs1.send_keys(page_num)submit1 = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')submit1.click()booklist= browser.find_elements_by_css_selector('.J_MouserOnverReq')for book in booklist:yield {'price' : book.find_element_by_css_selector('strong').text,'deal_num' : book.find_element_by_css_selector('.deal-cnt').text[:-3],'shopname' : book.find_element_by_css_selector('.shopname').text.strip(),'location' : book.find_element_by_css_selector('.location').text}

试试看返回第3页的数据

for i in get_one_page(3):print(i)
京创新华图书专营店 黑龙江 哈尔滨 39.80 3327
三辰图书专营店 湖北 武汉 38.80 1497
华鼎文创图书专营店 北京 68.80 208
世纪慧泉图书音像专营店 福建 厦门 75.80 86
豫仁培博图书专营店 河南 新乡 29.80 2380
西林图书专营店 安徽 合肥 169.00 375
互优图书专营店 北京 29.80 4475
书山有路图书专营店 北京 99.00 190
读品图书专营店 北京 64.00 2867
融鼎图书专营店 江苏 淮安 32.80 302
盛世九九图书专营店 北京 29.80 5197
时代新知图书专营店 北京 79.80 342
山东书虫图书专营店 山东 济南 52.50 4411
宇光魅图书专营店 湖南 长沙 28.80 10985
凤凰新华书店旗舰店 江苏 南京 89.10 362
杭州爱来屋图书专营店 浙江 杭州 33.80 4404
中昊欣彩图书专营店 北京 48.00 561
警苑图书专营店 北京 39.80 25864
邦雅图书专营店 北京 98.00 1731
青青书坊图书专营 重庆 24.90 2145
博库图书专营店 浙江 杭州 24.50 1310
当当网官方旗舰店 北京 339.30 506
当当网官方旗舰店 北京 25.60 11192
中少金开明图书专营店 北京 26.50 1946
爱的书房图书专营店 浙江 杭州 55.00 996
卓越书香图书专营店 北京 58.00 1817
宏坤图书音像专营店 北京 72.00 734
弗洛拉图书专营店 山东 济南 27.80 4647
新华文轩网络书店 四川 成都 177.00 702
新华文轩网络书店 四川 成都 44.80 1288
晋源图书专营店 江苏 南京 42.00 978
至诚经典图书专营店 河南 郑州 299.00 59
融鼎图书专营店 江苏 淮安 44.60 270
世纪慧泉图书音像专营店 福建 厦门 39.00 1071
凯福图书专营店 北京 57.80 542
逸观图书专营店 浙江 杭州 29.80 3608
思远图书专营店 北京 239.00 165
熙丽百川图书专营店 湖北 武汉 69.90 10639
新又雅图书专营店 广东 广州 53.80 1532
锦瑭图书专营店 北京 37.00 259
品悦轩图书专营店 北京 23.00 506
翰墨怡香图书专营店 北京 55.80 268
伙伴组合 北京 45.00 809
弘图图书专营店 安徽 合肥 174.30 594

返回成功

我们需要把数据从字典格式转为dataframe格式,最后保存为csv格式文件

定义字典到datafram转换的函数

def to_df(page_num):items = get_one_page(page_num)time.sleep(1)lis =[]for item in items:lis.append(item)data = pd.DataFrame(lis)return data

总共有100页,返回每页的数据,合并不同页的datafram

def data_df():df = to_df(1)for i in range(2,101):time.sleep(2)dfi = to_df(i)if i%5 ==0:print('正在合并第%d页...'%i)df = df.append(dfi,ignore_index = True)return df

保存为csv

def save_csv():df = data_df()df.to_csv(r'C:\Users\Administrator\Desktop\书籍.csv',encoding ='gb18030',index = False)

注意要用gb18030,抓取的数据有特殊字符

save_csv()
正在合并第5页...
正在合并第10页...
正在合并第15页...
正在合并第20页...
正在合并第25页...
正在合并第30页...
正在合并第35页...
正在合并第40页...
正在合并第45页...
正在合并第50页...
正在合并第55页...
正在合并第60页...
正在合并第65页...
正在合并第70页...
正在合并第75页...
正在合并第80页...
正在合并第85页...
正在合并第90页...
正在合并第95页...
正在合并第100页...

抓取完成,共4393条数据

保存为csv。

代码总览

from selenium import webdriver
from bs4 import BeautifulSoup
from multiprocessing import Pool
import pandas as pd
import timeurl ='https://www.taobao.com/'
browser = webdriver.Chrome()
browser.get(url)
inputs = browser.find_element_by_css_selector('#q')
inputs.send_keys('书籍')
submit = browser.find_element_by_css_selector('#J_TSearchForm > div.search-button > button')
submit.click()def get_one_page(page_num):inputs1 = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > input')inputs1.clear()page_num = page_numinputs1.send_keys(page_num)submit1 = browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')submit1.click()time.sleep(2)#休息2秒,加载太快,元素定位不到doc = browser.page_sourcesoup = BeautifulSoup(doc,'lxml')booklist = soup.select('.J_MouserOnverReq')for book in booklist:yield {'price' : book.select('strong')[0].text,'deal_num' : book.select('.deal-cnt')[0].text[:-3],'shopname' : book.select('.shopname')[0].text.strip(),'location' : book.select('.location')[0].text}def to_df(page_num):items = get_one_page(page_num)time.sleep(1)lis =[]for item in items:lis.append(item)data = pd.DataFrame(lis)return datadef data_df():df = to_df(1)for i in range(2,101):time.sleep(2)dfi = to_df(i)if i%5 ==0:print('正在合并第%d页...'%i)df = df.append(dfi,ignore_index = True)return dfdef save_csv():df = data_df()df.to_csv(r'C:\Users\Administrator\Desktop\书籍.csv',encoding ='gb18030',index = False)save_csv()

需要注意的是,每次翻页的时候注意time.sleep(2),因为翻页太快,网页还没加载出来,元素定位不到会报错,另外需要注意的是encoding要是gb18030,否则保存的时候可能出错。

模拟浏览器抓取淘宝书籍数据相关推荐

  1. 3.使用Selenium模拟浏览器抓取淘宝商品美食信息

    # 使用selenium+phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏览器翻页,并 ...

  2. 抓取淘宝购物车数据以及足迹数据

    demo地址:https://download.csdn.net/download/wanmeizty/11286264 抓取淘宝购物车数据以及足迹数据 1,首先接入百川SDK,授权登录,加载购物车, ...

  3. python获取登录按钮_Python:Selenium模拟Chrome浏览器抓取淘宝商品信息

    对于采用异步加载技术的网页,有时候想通过逆向工程的方式来设计爬虫进行爬取会比较困难,因此,要想通过python获取异步加载数据往往可以使用Selenium模拟浏览器的方式来获取. Selenium是一 ...

  4. python爬虫:Selenium模拟浏览器爬取淘宝商品信息

    1.数据提取前期网页分析 分析:淘宝网页数据也是通过Ajax技术获取的,但是淘宝的API接口参数比较复杂,可能包含加密密匙等参数:所以,想要通过自己构造API接口获取完整网页信息很难实现(可能只有部分 ...

  5. Python爬虫实战03:用Selenium模拟浏览器爬取淘宝美食

    1 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可以用Selenium来驱动浏览器模拟点击来爬取淘宝的信息.这样我们只要关系操 ...

  6. Python爬虫淘宝基于selenium抓取淘宝商品数据2021年测试过滑动验证

    配置一下"可能需要修改的参数",就可以食用底部代码了,ps:可能已失效 本文章代码功能 准备工作 Python用到的库和准备工作 可能需要修改的参数 在CMD中打开一个Chrome ...

  7. 用selenium模拟浏览器爬取淘宝订单信息

    用selenium模拟浏览器登录淘宝爬取自己购买商品的订单信息,代码不是十分完善,但是亲测可用,后期还可以进一步优化. 链接:https://pan.baidu.com/s/1aGwWCFaWPfOU ...

  8. python淘宝爬虫基于requests抓取淘宝商品数据_python淘宝爬虫基于requests抓取淘宝商品数据...

    在学校蹭过python的课,觉得python异常强大,趁寒假有时间,瞎搞一下,希望能和大伙一起探讨学习.废话不多说了,直接正题. requests 是Python的http库,可以完成绝大部分与htt ...

  9. python淘宝爬虫基于requests抓取淘宝商品数据

    在学校蹭过python的课,觉得python异常强大,趁寒假有时间,瞎搞一下,希望能和大伙一起探讨学习.废话不多说了,直接正题. requests 是Python的http库,可以完成绝大部分与htt ...

最新文章

  1. aide怎么打开html文件,求助!aide获取网页html源码
  2. php本页面调试报错配置
  3. Python【每日一问】36
  4. Linux学习进阶路线图
  5. Codis集群的搭建与使用
  6. java plat停止_击按钮就停止运行,大牛帮我看看
  7. 基于linux的集群系统LVS
  8. linux系统IO操作
  9. Python中的相对文件路径的调用
  10. 路飞学城14天集训营作业2—三级菜单
  11. java url压缩_URL压缩算法的短地址
  12. Lazyload 延迟加载效果(转载)
  13. Linux基础----gcc工具的使用
  14. 普元EOS在运算逻辑里面调用HttpServletRequest ,HttpServletResponse
  15. amos里CFA可行性辨别结果怎么看_本科毕业论文做问卷和数据分析应该怎么着手?(1)...
  16. linux整人指令,六个愚人节Linux恶作剧
  17. 王者荣耀英雄分析--孙悟空
  18. grub2引导linux内核,启动流程、模块管理、BootLoader(Grub2)
  19. 致敬5G时代“她力量”,那些让人怦然“兴”动的女神们
  20. 易經大意 061_080

热门文章

  1. PaymentsCloud怎么样
  2. 如何解决Could not load file or assembly ‘xxx.yyy, version=1.0.0.0, culture=neutral, public
  3. vue百度地图引入聚合,点击聚合,label被清理掉问题解决。同步异步问题
  4. python中tk的用法_python3.0 tk的使用
  5. 一个面试回来的程序员的感想
  6. 算法91----切绳子
  7. 计算机功能室安全预案,东华大学计算机学院实验室安全应急预案
  8. 口令攻击的理解和密码破解工具的使用
  9. Chrome 开发者工具的 11 个骚技巧
  10. PHP jquery转盘抽奖,php+jqueryRotate实现大转盘抽奖