分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

利用selenium并使用gevent爬取动态网页数据

发布时间:2023-09-06 02:34责任编辑:董明明关键词:selenium

首先要下载相应的库

gevent协程库:pip install gevent

selenium模拟浏览器访问库:pip install selenium

selenium库相应驱动配置  https://www.cnblogs.com/Niuxingyu/p/10490882.html

#导包import gevent#猴子补丁from gevent import monkeymonkey.patch_all()import requestsimport osimport refrom lxml import etree#模拟浏览器行为from selenium import webdriver#定义全局变量global_url_list = []#定义类class GeventSpider(object): ???#定义类属性 ???encloseing_url_list = [] ???#定义抓取方法 ???def run(self,url): ???????# 抓取写文件 ???????if url == ‘http://military.cctv.com/‘ : ???????????file_name = ‘test_cctv.html‘ ???????else: ???????????file_name = ‘inner_cctv.html‘ ???????html_content = ‘‘ ???????if not os.path.exists(file_name) : ???????????#定义浏览器对象 ???????????browser = webdriver.Chrome() ???????????browser.get(url) ???????????#解码赋值 ???????????html = browser.page_source.encode(‘utf-8‘).decode() ???????????time.sleep(1) ???????????#解码 ???????????# html = r.content.decode(‘utf-8‘) ???????????#写文件 ?指定文件编码 ???????????with open(‘./‘+file_name,‘w‘,encoding=‘utf-8‘) as f: ???????????????f.write(html) ???????????#关闭浏览器 ???????????browser.quit() ???????????html_content = ?html ???????else: ???????????????#读取文件返回 ???????????with open(‘./‘+file_name,encoding=‘utf-8‘) as f: ???????????????content = f.read() ???????????html_content = content ???????self.get_xpath(html_content) ???#定义数据匹配方法 ???def get_xpath(self,html): ???????#转换格式 ???????html = etree.HTML(html) ???????#匹配url ???????html_data_url = html.xpath(‘//span[@class="l"]/a/@href‘) ???????#声明修改全局变量 ???????global global_url_list ???????global_url_list = html_data_url ???????#修改类属性 ???????self.encloseing_url_list = html_data_url ???#定义爬取内页逻辑 ???def get_inner(self,url): ???????#发送请求 ???????r = requests.get(url) ???????html = r.content.decode(‘utf-8‘) ???????#正则匹配标题 ???????regex = re.compile(‘<h1>(.+?)</h1>‘,re.I) ???????print(regex.findall(html))if __name__ == "__main__": ???#实例化一个对象 ???geventspider = GeventSpider() ???#定义一个urllist ???url_list = [‘http://military.cctv.com/‘] ??????#请求首页没必要开协程 ???geventspider.run(url_list[0]) ???????#重新赋值 使用协程同时爬取十四个内页 ?其实这里我们做了两种方法一个使用类属性赋值,还可以使用我们定义好的全局变量global_url_list来进行赋值 ???url_list = geventspider.encloseing_url_list ???#url_list = global_url_list ???#列表推倒式将所有创建好的协程写入列表 ???job_list = [gevent.spawn(geventspider.get_inner,item) for item in url_list] ???#阻塞协程 等待所有协程完成后在进行关闭 ???gevent.joinall(job_list) ?

利用selenium并使用gevent爬取动态网页数据

原文地址:https://www.cnblogs.com/Niuxingyu/p/10509697.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved