使用selenium调用火狐浏览器爬取网页文本及链接

时间:2017年8月6号晚上3点40分    ,   失眠了,闲来无事写个随笔吧。

几天前朋友问我能不能帮他爬取一个网址的文本及链接,想自己整理一便以方便学习,网址:http://www.bianceng.cn/Programming/cplus/

需求:将网页内的文本内容及对应超链接保存到本地,总共60页,1773条

考虑到网页中第一页的url为:http://www.bianceng.cn/Programming/cplus/      ;   第2至60页的url为:url = 'http://www.bianceng.cn/Programming/cplus/index'+ str(page_number)+'.htm'   需要爬取内容简单,网页url规律性强,直接暴力搞定


思路:1.使用selenium调用火狐浏览器加载网页,第一页直接加载,第2-60页for循环生成网页 url

            2.浏览该网页源码你会发现,所有的文章都在 li 标签中,第一步:定位到 li 标签找出该页所有的包含文章及链接的部分 html 代码

            3.for循环在第二步得到的items 找出每个文章的 text 文本 及 herf   加载事先定义好的容器 list 中

            4.将list转化为DataFrame格式直接诶写到本地,有点懒,怎么快怎么来吧

废话不多说直接上代码吧:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
import pandas as pd
'''
2-60页代码基本跟第一页处理一样,不加注释了
'''
path = '/home/ycxu/下载/geckodriver'

browser = webdriver.Firefox(executable_path=path)    
browser.set_page_load_timeout(30)
l = []  #存储功能
'''
加载第一页内容
'''
browser.get('http://www.bianceng.cn/Programming/cplus/')
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
#定位到 li 标签
page_texts_one = browser.find_element_by_css_selector('html body.articlelist div.w960.center.clear.mt1 div.list_pleft div.listbox ul.e3').find_elements_by_tag_name('li')
print '第一页内容:'
for i in page_texts_one:
  print i.find_elements_by_tag_name('a')[0].get_attribute('text') ,i.find_elements_by_tag_name('a')[0].get_attribute('href')
  #将文章内容及链接存储到list容器中
  l.append([i.find_elements_by_tag_name('a')[0].get_attribute('text') ,i.find_elements_by_tag_name('a')[0].get_attribute('href')])  



'''
加载2到60页
'''
for page in xrange(2,61):
  url = 'http://www.bianceng.cn/Programming/cplus/index'+ str(page)+'.htm'
  browser.get(url)
  browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
  time.sleep(3)   # 不然会load不完整
  page_texts_two = browser.find_element_by_css_selector('html body.articlelist div.w960.center.clear.mt1 div.list_pleft div.listbox ul.e3').find_elements_by_tag_name('li')
  print '第%d页内容:' % page
  for i in page_texts_two:
    print i.find_elements_by_tag_name('a')[0].get_attribute('text') ,i.find_elements_by_tag_name('a')[0].get_attribute('href')
    l.append([i.find_elements_by_tag_name('a')[0].get_attribute('text') ,i.find_elements_by_tag_name('a')[0].get_attribute('href')])
#将list容器转换为DataFrame格式,一句话即可保存到本地,对懒人来说是个不错的处理方法
h = pd.DataFrame(l)
h.to_csv('/home/ycxu/桌面/page_info.csv',encoding = 'utf-8')
h.to_csv('/home/ycxu/桌面/page_info.txt',encoding = 'utf-8')


           


你可能感兴趣的:(爬虫)