栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python动态网页数据收集

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python动态网页数据收集

对于静态网页,只需要把网页地址栏中的url传到get请求中就可以轻松地获取到网页的数据。但是,经常会遇到直接把网页地址栏中的url传到get请求中无法直接获取到网页的数据的情况,而且右键查看网页源代码也无法看到网页的数据,同时点击第二页、第三页等进行翻页的时候,网页地址栏中的url也没变,这些就是动态网页。

动态网页数据收集有两种方式:

第一种:

先分析网页数据获取和跳转的逻辑,再去写代码。

第二种:

Selenium+WebDriver,驱动浏览器,模拟用户输入,获取目标网页源码。

(第一种我不会,就直接选第二种,相比第一种,Selenium+WebDriver优点是逻辑简单,编码时间短,缺点是driver运行慢)

Selenium

安装:

pip install torchtext(我也不知道为什么要装这个,但是直接install selenium就是不行)
pip install selenium

WebDriver

根据自己的浏览器和版本安装:

chrome浏览器的web driver(chromedriver.exe),可以在下面网址访问:
http://npm.taobao.org/mirrors/chromedriver/

firefox(火狐浏览器)的**web driver (geckodriver.exe)**在这里访问:
https://github.com/mozilla/geckodriver/releases

其他浏览器驱动可以见下面列表:

Edge:https://developer.microsoft.com/en-us/micrsosft-edage/tools/webdriver

Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

以谷歌浏览器为例:

在浏览器设置–>>关于Chrome查看浏览器版本,再下载对应的chromedriver

chromedriver.exe放到python.exe的同级目录下

运行下面的代码测试,弹出浏览器打开百度就可以了

chromedriver测试代码

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

无界面测试代码 (Headless是无界面模式)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options=Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver=webdriver.Chrome(options=chrome_options)
driver.get("http://www.baidu.com")
print(driver.title)
driver.close()
driver.quit()
简单实战

在1688搜索键盘,根据成交额排序,收集商品名和复购率数据

  1. 浏览器打开网站
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep

#设置浏览器窗口大小,设大一点才能点击到
window_width=2048
window_height=2048*20
driver=webdriver.Chrome()
driver.set_window_size(window_width, window_height)
driver.get("https://www.1688.com/")

ps:有的界面需要滚动才会动态加载内容,可以把窗口设置大一点,当然也可以调用driver的滚动方法。

  1. 找到搜索框和搜索按钮
#输入查找关键字
element = driver.find_element_by_css_selector('#home-header-searchbox')
element.send_keys('键盘')#模拟输入文字

#点击搜索
element = driver.find_element_by_css_selector('#search-tab-wrap > div.search-box-wrap > div > div > div.ali-search > form > fieldset > div > div.alisearch-action > button')
element.click()#模拟鼠标点击

3 切换到新窗口

点击搜索后,打开了新的窗口,切换到新窗口

#打开搜索产品的窗口
driver.switch_to.window(driver.window_handles[-1])
  1. 点击成交额
#点击成交额
element = driver.find_element_by_css_selector('#search-filtItems > div.filter-item-container > ul > li:nth-child(2) > a > span')
element.click()
sleep(2)#等待一会儿 加载完这一页所有产品
  1. 获取当前页产品文本和复购率文本
for i in range(1,30):
    try:
    	element = driver.find_element_by_xpath('//*[@id="sm-offer-list"]/div['+str(i)+']/div/div[2]/a/div')
    	etext=element.text
    	element =driver.find_element_by_xpath('//*[@id="sm-offer-list"]/div['+str(i)+']/div/div[3]/div[2]/span')
    	fugou=element.text
    	print(etext+'   '+fugou)#这里就输出到控制台
	except Exception:
        print('index:'+str(i)+'获取失败')
        #print(traceback.format_exc()) #输出堆栈 需要import traceback
sleep(1000)
driver.close()
driver.quit()
print('退出')
获取UI元素的技巧
  1. 在对应的UI上右键,选中检查

  2. 在弹出的窗口会定位到这个UI组件的标签块,对这个标签块再右键Copy
    根据自己的习惯选择复制的选项,常用的有css selector和xpath

史上最全!Selenium元素定位的30种方式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号