python爬虫之动态网页(以某宝、某猫、某东为例)

python爬取动态网页时,使用requests库就无法获取到在网页上动态加载的数据,举个例子,以淘宝为例,在搜索栏上搜索电脑,出现的所有商品信息都为动态加载的数据,

import requests
head = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36\
                   (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
url = 'https://ai.taobao.com/search/index.htm?spm=a231o.13503973.search.1&key=%E7%94%B5%E8%84%91'
data = requests.get(url=url,headers=head)#利用get进行请求
data.encoding=data.apparent_encoding#设置编码格式
content = data.text#将对网站访问的信息保存在content变量中
print(content)

我们在打印出来的content中搜索不到商品的任何信息

但是在网页的代码中数据又确实存在

那现在怎么办呢??我们用浏览器打开页面是可以看到信息的,但是用requests去请求网页就请求不到数据

其实也很简单,我们采用真实浏览器访问页面,再将它的源代码取下来,对此时的源代码进行爬取就可以了,所以现在问题就是如何用代码进行真实的浏览器访问

接下来引入seleiunm的概念,它是一个web应用的测试工具,能够驱动浏览器对页面进行访问

一般来说,seleiunm要与一个浏览器的驱动程序一起使用

谷歌浏览器的驱动程序叫ChromeDriver,火狐浏览器的驱动叫GeckoDriver,读者自行百度安装下载,也可以在CSDN上找到驱动的安装方法

小编使用的是火狐浏览器

我们不使用requests,需要从头将代码换一下

from selenium import webdriver
browser = webdriver.Firefox(executable_path=r'D:\python\python安装\Scripts\geckodriver.exe')#实例化一个驱动对象
browser.get('https://uland.taobao.com/sem/tbsearch?&keyword=电脑&pnum=0')#利用浏览器驱动访问淘宝搜索  电脑第一页
data = browser.page_source#获取页面的源代码
print(data)

此时的data为网页的真实源代码,我们试试搜一下商品信息

发现,此时代码获得的信息中,是可以爬取到商品信息的

加下来就使用正则表达式,对获取的信息进行筛选,过滤出我们需要的信息

根据小编的总结

商品名称的匹配规则为

p_name = '<span class="title-text">(.*?)</span>'

商品现价格的匹配规则为

p_price = '<span class="coupon-price-afterCoupon">(.*?)</span>'

商品原价格的匹配规则为

p_price_old = '<span class="coupon-price-old">(.*?)</span>'

商品店家的匹配规则为

p_store = '<span class="atbfont seller-icon"></span>(.*?)</div>'

商品月销量的匹配规则为

p_sale = '<div class="sell-info">月销 (.*?)</div>'

以商品名称为例,我们做一个示范

p_name = '<span class="title-text">(.*?)</span>'
namelist = re.findall(p_name, data)
print(namelist)

运行后出现的结果

可以看到现在就将淘宝的商品名称爬取出来了,其实也很简单

商品的价格、店家、月销量等信息可以通过此类方法进行获取,这里就不一一演示了

最后将完整的代码分享给大家,大家不要机械地复制粘贴,要将代码改为适合自己电脑的,下面的代码适用于小编的电脑,在其他电脑上,可能需要将浏览器驱动程序的路径(第七行)等 改为自己电脑的方可运行

import re
from selenium import webdriver
dataset = {'商品名称':[],'商品价格':[],'原价':[],'店铺':[],'月销':[]}
name = input('请输入商品名称:')
page = input('请输入获取淘宝数据页数:')
num = int(page)
browser = webdriver.Firefox(executable_path=r'D:\python\python安装\Scripts\geckodriver.exe')
p_name = '<span class="title-text">(.*?)</span>'
p_price = '<span class="coupon-price-afterCoupon">(.*?)</span>'
p_price_old = '<span class="coupon-price-old">(.*?)</span>'
p_store = '<span class="atbfont seller-icon"></span>(.*?)</div>'
p_sale = '<div class="sell-info">月销 (.*?)</div>'

for i in range(0,num):
    browser.get('https://uland.taobao.com/sem/tbsearch?&keyword={}&pnum={}'.format(name,i))
    data = browser.page_source
    namelist = re.findall(p_name, data)
    for i in namelist:
        dataset['商品名称'].append(i)

    pricelist = re.findall(p_price, data)
    for i in pricelist:
        dataset['商品价格'].append(i)

    price_oldlist = re.findall(p_price_old, data)
    for i in price_oldlist:
        i = i.replace('¥', '')
        dataset['原价'].append(i)

    store = re.findall(p_store, data)
    for i in store:
        dataset['店铺'].append(i)

    sale = re.findall(p_sale, data)
    for i in sale:
        dataset['月销'].append(i)

browser.quit()

print('共计{}件商品'.format(len(dataset['商品名称'])))

import xlwings as xw
app = xw.App(visible=False,add_book=False)
print('正在生成excel表格...(共5列)')
work_book = app.books.add()
work_sheet = work_book.sheets.add('淘宝{}前{}页数据'.format(name,num))
work_sheet['A1'].value = '商品名称'
work_sheet['B1'].value = '现价'
work_sheet['C1'].value = '原价'
work_sheet['D1'].value = '店铺'
work_sheet['E1'].value = '月销量'
for i,j in zip(dataset.keys(),range(1,6)):
    for k in range(2,num * 60):
        cell = '{}{}'.format(chr(64+j),k)
        work_sheet[cell].value = dataset[i][k-2]
    print('第{}列已完成'.format(j))
work_sheet.autofit()
work_book.save(r'C:\Users\yzb\Desktop\淘宝{}数据.xlsx'.format(name))
work_book.close()
app.quit()
print('程序运行结束')

接下来我们看看代码的实际效果

python爬虫某宝

 

  • 8
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值