21 - 数据接口与selenium的基本用法

Day 21

一、数据接口

在网页数据面打开检查,利用精确定位标签对应网页源代码的位置,在点击network ,可以通过改按钮获取浏览器信息、cookie信息,并且找到数据接口
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 实例:获取英雄联盟所有英雄姓名
import requests

response = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js')

result = response.json()

for x in result['hero']:
    print(x['name'])

二、selenium的基本用法

1. 创建浏览器对象(浏览器对象如果是全局变量,浏览器不会自动关闭)

from selenium.webdriver import Chrome
b = Chrome()

2. 打开网页(你需要爬的数据在哪个网页里面,就打开哪个网页)

b.get('https://movie.douban.com/top250')

3. 获取网页源代码(获取到的一定是页面中加载出来的)

print(b.page_source)

3. 获取网页源代码(获取到的一定是页面中加载出来的)

b.close()

二、selenium控制浏览器的基本行为

  • 此处以某东作为示例
b = Chrome()
b.get('https://www.jd.com')

1.输入框输入内容

  • 利用代码在目标网站进行伪人类操作,如在输入框输入想要搜索的内容
  • 1)找到输入框:需要自身对网页进行解析,找到输入框对应的标签,并且获取。
input_tag = b.find_element_by_id('key')
  • 2)输入框输入内容:在找到输入框对应的标签后,赋予变量,并使用 输入框.send_keys方法输入想要搜索的内容即可,注意需要在文本内容最后加\n,意思代表回车。
input_tag.send_keys('电脑\n')
print(b.page_source)
  • 点击标签
  • 在网页上实现点击功能,同上也需要找到需要点击按钮对应的标签,使用 按钮标签.click()方法实现点击命令。
btn = b.find_element_by_css_selector('#navitems-group2 .b')
btn.click()

练习:利用输入框和点击完成对需要商品的搜索和点击下一页,并将这两页数据持久化

from selenium.webdriver import Chrome
from time import sleep
from bs4 import BeautifulSoup
import csv
import lxml
f = open('files/手机数据.csv', 'w', encoding='utf-8')
writer = csv.writer(f)
writer.writerow(['商品','价格'])


def analysis_data(html: str):
    soup = BeautifulSoup(html,'lxml')
    all_iphone = soup.select('#J_goodsList>ul>li>div.gl-i-wrap')
    # print(all_iphone)
    phone = []
    for iphone in all_iphone:
        name = iphone.select_one('.p-name em').text
        price = iphone.select_one('.p-price i').text
        phone.append([name, price])
    writer.writerows(phone)
    return phone




b = Chrome()
# 1.输入框输入内容
b.get('https://www.jd.com')

# a.找到输入框标签
input_tag = b.find_element_by_id('key')

# b.在输入框输入内容
input_tag.send_keys('手机\n')
sleep(2)
# c.第一页获取手机页面数据
result = b.page_source
analysis_data(result)

sleep(2)
# # 2.点击按钮
# # 点击第二页
btn = b.find_element_by_css_selector('#J_bottomPage>span>.pn-next')
btn.click()

# 获取第二页手机页面数据
sleep(2)
result1 = b.page_source
analysis_data(result1)
f.close()



input('是否结束:')
b.close()



三、切换选项卡

  • 在我们自行浏览网页时,会打开多个标签页,并且来回切换,怎么能使用代码做到呢?

1.基本操作,创建浏览器饼打开网页,在输入框输入内容,获取需要点击的所有标签: 如果拿到标签后需要点击或者输入,必须通过浏览器获取标签

from selenium.webdriver import Chrome
from time import sleep
from bs4 import BeautifulSoup

# 1. 基本操作
b = Chrome()                        # 创建浏览器
b.get('https://www.cnki.net/')      # 打开中国*网
search_tag = b.find_element_by_id('txt_SearchText')     # 获取输入框
search_tag.send_keys('数据分析\n')      # 输入框输入'数据分析',然后按回车
sleep(1)        # 切换界面最后做一个等待操作

# 获取需要点击的所有标签: 如果拿到标签后需要点击或者输入,必须通过浏览器获取标签
all_result = b.find_elements_by_css_selector('.result-table-list .name>a')
# 点击第一个结果(这儿会打开一个新的选项卡)
all_result[0].click()
sleep(1)

2. 切换选项卡

  • 注意:selenium中,浏览器对象(b)默认指向一开始打开的选项卡,除非用代码切换,否则浏览器对象指向的选项卡不会变
  • 1)获取当前浏览器上所有的窗口(选项卡): 浏览器.window_handles
  • 2)切换选项卡
# 跳转到窗口(获取所有窗口)
b.switch_to.window(b.window_handles[-1])
  • 3)解析内容
soup = BeautifulSoup(b.page_source, 'lxml')
result = soup.select_one('#ChDivSummary').text
print(result)

b.close()           # 关闭当前指向的窗口(最后一个窗口),窗口关闭后,浏览器对象的指向不会发生改变


# 回到第一个窗口,点击下一个搜索结果
b.switch_to.window(b.window_handles[0])
all_result[1].click()
sleep(1)

b.switch_to.window(b.window_handles[-1])

soup = BeautifulSoup(b.page_source, 'lxml')
result = soup.select_one('#ChDivSummary').text
print(result)

b.close()



input('结束:')
b.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值