当前位置 : IT培训网 > IT培训 > 新闻资讯 > Python爬虫采集数据容易吗 怎么样学好python编程呢

Python爬虫采集数据容易吗 怎么样学好python编程呢

时间:2019-08-01 13:04:47  来源:IT资讯网  作者:IT培训网  已有:名学员访问该课程
标签(Tag):   python爬虫(10)
小明开始学习python爬虫编程了,仿佛整个互联网的数据都快被他纳入囊中了。今天,他又试图完成一个高难度动作,他想让selenium中抓取到以下HTML后,并自动执行js脚本,模仿鼠标自动执行一个点击动作。

Python爬虫很强大,在爬虫里如何自动操控浏览器呢?我们知道在浩瀚的搜素引擎中,有成千上百亿只爬虫,每天往来于互联网之中,那么如此强大的互联网中爬虫是如何识别浏览器的呢,又是如何抓取数据的呢?

概述:

python通过selenium爬取数据是很多突破封锁的有效途径。但在使用selenium中会遇到很多问题,本文就通过一问一答的形式来通熟易懂的普及如何通过selenium执行javascript程序,进而获取动态执行后的网页。如果你喜欢,欢迎转发本文。

Python爬虫采集数据容易吗 怎么样学好python编程呢_www.itpxw.cn

Python爬虫采集数据容易吗 怎么样学好python编程呢

python爬虫编程:用selenium执行javascript出错了,该咋改?

问题:

小明开始学习python爬虫编程了,仿佛整个互联网的数据都快被他纳入囊中了。今天,他又试图完成一个高难度动作,他想让selenium中抓取到以下HTML后,并自动执行js脚本,模仿鼠标自动执行一个点击动作。但令他很失望的是,居然,居然,没用!


  1. <div class="vbseo_liked"
  2. <a href="http://www.itpxw.cn/member/index.php?uid=teduchhch86" rel="nofollow">Nyaralego</a> 
  3. <a href="http://www.itpxw.cn/member/index.php?uid=teduchhch86" rel="nofollow">Sikonge</a> 
  4. <a href="http://www.itpxw.cn/member/index.php?uid=teduchhch86" rel="nofollow">Ab-Titchaz</a> 
  5. and 
  6. <a onclick="return vbseoui.others_click(this)" href="http://www.itpxw.cn/member/index.php?uid=teduchhch86">11 others</a> 
  7. like this. 
  8. </div> 

这是他执行的代码。


  1. browser.execute_script("document.getElement(By.xpath
  2. ("//div[@class='vbseo_liked']/a[contains(@onclick, 'return vbseoui.others_click(this)')]").click()"

它没用,没有反应。究竟做错了什么?

Python大大的答案:

要点回答:

使用selenium查找元素并将其传递execute_script()给单击:


  1. link = browser.find_element_by_xpath
  2. ('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]'
  3. browser.execute_script('arguments[0].click();', link) 

如果要从头解决这问题,那么以下就是需要了解它的一系列事情:

  • 如何使用JavaScript模拟点击?

这就是我做的东西。这很简单,但它有效:


  1. function eventFire(el, etype){ 
  2.  if (el.fireEvent) { 
  3.  el.fireEvent('on' + etype); 
  4.  } else { 
  5.  var evObj = document.createEvent('Events'); 
  6.  evObj.initEvent(etype, truefalse); 
  7.  el.dispatchEvent(evObj); 
  8.  } 

用法:


  1. eventFire(document.getElementById('mytest1'), 'click'); 
  • 如何在Python里进行模拟点击呢?首先制定一个自定义的预期条件,等待元素被“执行”:

  1. class wait_for_text_not_to_end_with(object): 
  2.  def __init__(self, locator, text): 
  3.  self.locator = locator 
  4.  self.text = text 
  5.  def __call__(self, driver): 
  6.  try : 
  7.  element_text = EC._find_element(driver, self.locator).text.strip() 
  8.  return not element_text.endswith(self.text) 
  9.  except StaleElementReferenceException: 
  10.  return False 

定义完毕后,如何在程序里调用这个类呢?看看以下代码:


  1. from selenium import webdriver 
  2. from selenium.common.exceptions import StaleElementReferenceException 
  3. from selenium.webdriver.common.by import By 
  4. from selenium.webdriver.support.ui import WebDriverWait 
  5. from selenium.webdriver.support import expected_conditions as EC 
  6. class wait_for_text_not_to_end_with(object): 
  7.  def __init__(self, locator, text): 
  8.  self.locator = locator 
  9.  self.text = text 
  10.  def __call__(self, driver): 
  11.  try : 
  12.  element_text = EC._find_element(driver, self.locator).text.strip() 
  13.  return not element_text.endswith(self.text) 
  14.  except StaleElementReferenceException: 
  15.  return False 
  16. browser = webdriver.PhantomJS() 
  17. browser.maximize_window() 
  18. browser.get("http://www.itpxw.cn/it/new/20198728.html"
  19. username = browser.find_element_by_id("navbar_username"
  20. password = browser.find_element_by_name("vb_login_password_hint"
  21. username.send_keys("MarioP"
  22. password.send_keys("codeswitching"
  23. browser.find_element_by_class_name("loginbutton").click() 
  24. wait = WebDriverWait(browser, 30) 
  25. wait.until(EC.visibility_of_element_located((By.XPATH, '//h2[contains(., "Redirecting")]'))) 
  26. wait.until(EC.title_contains('Kenyan & Tanzanian')) 
  27. wait.until(EC.visibility_of_element_located((By.ID, 'postlist'))) 
  28. # click "11 others" link 
  29. link = browser.find_element_by_xpath
  30. ('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]'
  31. link.click() 
  32. browser.execute_script(""
  33. function eventFire(el, etype){ 
  34.  if (el.fireEvent) { 
  35.  el.fireEvent('on' + etype); 
  36.  } else { 
  37.  var evObj = document.createEvent('Events'); 
  38.  evObj.initEvent(etype, truefalse); 
  39.  el.dispatchEvent(evObj); 
  40.  } 
  41. eventFire(arguments[0], "click"); 
  42. """, link) 
  43. # wait for the "div" not to end with "11 others link this." 
  44. wait.until(wait_for_text_not_to_end_with((By.CLASS_NAME, 'vbseo_liked'), "11 others like this.")) 
  45. print 'success!!' 
  46. browser.close() 

看,如何在python里通过selenium来爬取数据就是这么简单。要点掌握好,开始编制自己的爬虫吧。

用爬虫采集数据就是这么简单,如果你对python编程感兴趣,那就好好的学习下吧,用爬虫采集数据一点都不难,对于这个你开始学习了吗?

顶一下
(0)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容