Selenium在爬虫领域的初涉(自动打开网站爬取信息)

发表于:2019-3-07 11:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:SnailClimb    来源:掘金

  为什么selenium可以用在爬虫领域?
  一般的写爬虫的方法是用python脚本直接对目标网站进行访问,而且只对目标数据进行采集,访问速度很快,这样目标网站很容易就识别出你是机器人,然后把你封锁了~~而使用selenium写爬虫,python脚本操控浏览器进行访问,也就是说python脚本和目标网站之间多了个浏览器的操作,这样的行为更像是人类行为。这样很多难爬的网站也可以轻而易举的抓数据了。
  使用selenium前的准备
  如果你没有安装selenium,请先使用conda install selenium或pip install selenium.
  下载好你的firefox浏览器(这里推荐firefox,当然chrome也行)
  安装geckodriver 。geckodrive下载地址:github.com/mozilla/gec…
  (如果你无法下载请评论一下,我这里有一个安装包)
  将下载的geckodriver.exe 放到path路径下 D:/Python/Python35-32/(就是放到你的python安装路径下,我这里是假设你已经安装好了python并且Python安装路径已经被添加到了path环境变量下)
  如果你没有安装geckodriver.exe应该会出现如下的错误:
  WebDriverException: 'geckodriver' executable needs to be in PATH.
  selenium基本知识
  自动打开某个网址
   from selenium import webdriver
  from bs4 import BeautifulSoup
  初始化浏览器
  driver = webdriver.Firefox()
  打开某个网址
  driver.get(url)
  输入登录账号密码(如果需要登录的话)
   #这里是根据xpath输入账号和密码的
  driver.find_element_by_xpath(xpath).clear()
  driver.find_element_by_xpath(xpath).send_keys("你的账号")
  driver.find_element_by_xpath(xpath).clear()
  driver.find_element_by_xpath(xpath).send_keys("你的密码")
  #定位“点击登录”框的位置的xpath,通过click()执行登录
  driver.find_element_by_xpath(xpath).click()
  访问你想爬的网页
  #获取该网页的源码
  driver.get(url)
  html = driver.page_source
  bs4 = BeautifulSoup(html,'lxml')
  selenium使用
  打开百度首页
   ## 引入WebDriver的包
  from selenium import webdriver
  ## 创建浏览器对象
  browser = webdriver.Firefox()
  ## 打开百度网站
  browser.get('https://www.baidu.com/')
  
  效果:自动打开浏览器,然后打开百度首页
  模拟登录csdn
   from selenium import webdriver
  ## 创建浏览器对象
  browser = webdriver.Firefox()
  ## 打开小米社区网站
  browser.get('https://passport.csdn.net/account/login')
  browser.find_element_by_xpath("//*[@id='username']").clear()#清空输入框
  browser.find_element_by_xpath("//*[@id='username']").send_keys("你的账号")#输入账号
  browser.find_element_by_xpath("//*[@id='password']").clear()#清空输入框
  browser.find_element_by_xpath("//*[@id='password']").send_keys("你的密码")#输入密码
  browser.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/div[1]/div/form/input[8]").click()#登录
   效果:自动打开浏览器,然后打开csdn登录首页,自动输入用户名和密码实现登录。
  模拟登录小米社区并抓取帖子标题
   ## 引入WebDriver的包
  from selenium import webdriver
  from bs4 import BeautifulSoup
  ## 创建浏览器对象
  browser = webdriver.Firefox()
  ## 打开小米社区网站
  browser.get('https://account.xiaomi.com/pass/serviceLogin?callback=http%3A%2F%2Fbbs.xiaomi.cn%2Flogin%2Fcallback%3Ffollowup%3Dhttp%253A%252F%252Fbbs.xiaomi.cn%252F%26sign%3DM2E4MTg3MzE3MGJmZGFiMTc0MTE5NmNjZTAyYWNmMDZhNTEwOTU2NQ%2C%2C&sid=new_bbs_xiaomi_cn&_locale=zh_CN')
  browser.find_element_by_xpath("//*[@id='username']").clear()#清空输入框
  browser.find_element_by_xpath("//*[@id='username']").send_keys("你的账号")#输入账号
  browser.find_element_by_xpath("//*[@id='pwd']").clear()#清空输入框
  browser.find_element_by_xpath("//*[@id='pwd']").send_keys("你的密码")#输入密码
  browser.find_element_by_xpath("//*[@id='login-button']").click()#登录
  base_url="http://bbs.xiaomi.cn/d-{page}"
  #我这里是抓取了前5页,当然你可以抓取的更多
  for i in range(1,6):
  url=base_url.format(page=i)
  browser.get(url)
  bs4=BeautifulSoup(browser.page_source,'lxml')
  titles=bs4.find_all('div', {'class':'title'})
  for title in titles:
  title_content=title.get_text().strip('\n')
  print(title_content)
  效果:
 
  遇到的一些问题
  如何获取xpath?
  这里说一个最简单的方法:
  打开firefox浏览器,进入相应页面,右键某个网页元素点击查看元素,然后复制xpath.如下图所示:
  2. WebDriverException: 'geckodriver' executable needs to be in PATH.
  这个上面也提到过。
  geckodrive下载地址:github.com/mozilla/gec…
  (如果你无法下载请评论一下,我这里有一个安装包)
  将下载的geckodriver.exe 放到path路径下 D:/Python/Python35-32/(就是放到你的python安装路径下,我这里是假设你已经安装好了python并且Python安装路径已经被添加到了path环境变量下)
 
      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号