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

xiaoxiao2021-02-28  194

时间: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')

           

转载请注明原文地址: https://www.6miu.com/read-41697.html

最新回复(0)