爬虫:requests bs4靓汤 抓包(ajax) selenium
使用selenium模拟用户
实现异步请求网络数据爬取!!!很清楚哇!!!
数据抓包常用方式:谷歌浏览器调试模式–>network—>选择xhr(异步请求的接口)–>查看对应接口的response响应数据
selenium
自动化爬虫(模拟器):模拟用户的行为(浏览器请求网址获取网页内容的行为)
安装: pip(conda) install selenium
浏览器驱动:chromedriver.exe
http://chromedriver.storage.googleapis.com/index.html
要根据当前浏览器的版本选择对应或者相近的驱动版本
将下载的chromedriver.exe驱动直接复制到python环境的scripts目录中
selenium简单使用
from selenium import webdriver
#1. 获取浏览器对象
# webdriver.Chrome(executable_path='chromedriver.exe')#没有导入驱动,就以相对路径的方式引入
browser = webdriver.Chrome()#将驱动导入到了scripts目录中
#2. 请求url
url = "https://www.baidu.com"
#3. 窗口最大化
browser.maximize_window()
browser.get(url)
selenium模拟用户行为豆瓣搜索
from selenium import webdriver
#1. 浏览器
browser = webdriver.Chrome()
url = "https://movie.douban.com/top250"
browser.maximize_window()
browser.get(url)
#2. 获取网页源码
# print(browser.page_source)
#3. 查找搜索框并赋值
# send_keys:给输入框赋值
browser.find_element_by_css_selector("#inp-query").send_keys("逐梦演艺圈")
#4. 查找搜索按钮并点击
browser.find_element_by_css_selector("#db-nav-movie > div.nav-wrap > div > div.nav-search > form > fieldset > div.inp-btn").click()
#5. 清空输入框内容
# clear:清空输入框内容
browser.find_element_by_css_selector("#inp-query").clear()
#6. 查找搜索框并赋值
# send_keys:给输入框赋值
browser.find_element_by_css_selector("#inp-query").send_keys("周润发")
#7. 查找搜索按钮并点击
browser.find_element_by_css_selector("#db-nav-movie > div.nav-wrap > div > div.nav-search > form > fieldset > div.inp-btn").click()
selenium自动翻页抓取京东数据
from selenium import webdriver
import time
import csv
#1. 浏览器
browser = webdriver.Chrome()
url = "https://www.jd.com/"
browser.maximize_window()
#2. 请求
browser.get(url)
#3. 搜索框输入内容并搜索
browser.find_element_by_css_selector("#key").send_keys("男士衣服")
browser.find_element_by_css_selector("#search > div > div.form > button").click()
time.sleep(2)#睡2秒,根据自己网络状况设置等待时间
#4. 下一页按钮可以被点击时:class="pn-next"
# 下一页按钮不可以被点击时:class="pn-next disabled"
#5. 循环翻页抓取数据 for while
# 循环结束的条件:到最后一页,不能被继续翻页
# 判断源码中是否存在pn-next disabled字符串内容,如果存在,表示到了最后一页,不能翻页
i = 1#控制页数
j = 1#控制条数
while(True):
# 6. 搜索所有商品的li var let const
li_list = browser.find_elements_by_css_selector("#J_goodsList > ul > li")
# 7. 遍历所有li
for li in li_list:
# 8. 价格
# 标签.text:获取标签内部的文本内容
price = li.find_element_by_css_selector("div > div.p-price > strong > i").text
# 9.标题
title = li.find_element_by_css_selector("div > div.p-name.p-name-type-2 > a > em").text
# 10.店铺 标签.get_attribute(属性名) : 获取标签的属性值
store = li.find_element_by_css_selector("div > div.p-shop > span > a").get_attribute("title")
# 11. 写入到csv文件
with open("男士衣服.csv", "a", encoding="utf-8", newline='') as file:
csv.writer(file).writerow([price, title, store])
print("第{}页第{}条下载完成".format(i,j))
j += 1
if browser.page_source.find("pn-next disabled") == -1:
#12. 开始翻页
browser.find_element_by_class_name("pn-next").click()
i+=1
time.sleep(2)#翻页之后等待
else:
break
拉勾网爬虫分析
from selenium import webdriver
browser = webdriver.Chrome()
browser.maximize_window()
browser.get("https://www.lagou.com/")
#1. 定位选全国
browser.find_element_by_css_selector("#changeCityBox > p.checkTips > a").click()
#2. 输入内容并搜索
browser.find_element_by_css_selector("#search_input").send_keys("数据分析")
browser.find_element_by_css_selector("#search_button").click()
#3. 给也不要
browser.find_element_by_css_selector("body > div.body-container.showData > div > div.body-btn").click()