首页 新闻 会员 周边

python Selenium+PhantomJS 有关网页未响应问题

0
悬赏园豆:100 [待解决问题]
from selenium import webdriver
import time
driver=webdriver.PhantomJS()
driver.get("https://www.icourse163.org/category/computer#?type=10&orderBy=0&pageIndex=1")
time.sleep(3)
title=driver.title
print(title)

小本白学年论文拟爬取各大慕课网站信息并进行汇总分析

问题:用python的selenium库+PhantomJs 对中国大学MOOC某课程信息进行爬取,却迟迟未响应(其他网页可以获得所需信息,猜想是否因为该网站禁止该方式爬取形式,有无其他获取ajax的形式)谢谢回答!

做到平淡的主页 做到平淡 | 初学一级 | 园豆:102
提问于:2018-07-04 19:31
< >
分享
所有回答(2)
0

用这个可以拿到

driver.getPageSource(); //java里方法是这样写的

 拿到的内容如下

ycyzharry | 园豆:25651 (高人七级) | 2018-07-05 10:00

拜求代码!

支持(0) 反对(0) 做到平淡 | 园豆:102 (初学一级) | 2018-07-07 19:44
0

有响应,只不过使用程序请求时,加载完大约需要5分钟,所以等待一会,会认为没反应,实际是有响应的。

代码如下:

测试结果如下:

silence-cc | 园豆:138 (初学一级) | 2018-07-07 22:53

您好!可以试着爬取一下关于课程链接的信息吗!单个课程的信息已经收集完成,但无法完成循环,因为目录页找不到课程链接,如果可以,甚是感谢!!!

支持(0) 反对(0) 做到平淡 | 园豆:102 (初学一级) | 2018-07-09 20:38

@做到平淡: 你的意思是爬取如计算机课程里面的所有单个课程的链接?

支持(0) 反对(0) silence-cc | 园豆:138 (初学一级) | 2018-07-09 23:42

@silence-cc: 对的,就是从目录页爬取单个课程的链接,实现循环不是要获得所有课程的网址信息吗

支持(0) 反对(0) 做到平淡 | 园豆:102 (初学一级) | 2018-07-10 13:22

@做到平淡: 可能我的phantomjs配置有问题,导致使用了selenium + chrom浏览器解决。代码如下

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
from lxml import etree


class douyuSelenium(unittest.TestCase):
    '''
    利用unittest模块的测试类来解决获取下一页的网页源码问题。
    正常情况,当点击下一页后,获取当前页的网页源码比较麻烦,而使用测试类的方法则可以很容易解决
    
    '''
    
    def setUp(self):
        ''' 
        初始化方法(固定写法)

        '''

        # 创建谷歌浏览器对象。
        self.driver = webdriver.Chrome()
        # 统计链接个数
        self.num = 0
        self.num2 = 1
        # 保存链接列表
        self.link_list = []
        # 请求网页,如果该行代码放在testMooc方法,会导致抓取的数据有重复,而且漏抓
        self.driver.get('https://www.icourse163.org/category/computer')

    def testMooc(self):
        '''
        具体的测试用例方法(方法名开头固定以test开头)

        '''

        while True:

            # 让网页完全加载,避免网页没加载完导致获取的数据丢失
            time.sleep(3)
            # 获取网页源码
            html = self.driver.page_source
            # 把源码解析为html dom文档
            content = etree.HTML(html)
            # 使用xpath去匹配所有的课程链接
            course_list = content.xpath('//div[@class="m-course-list"]//div[@class="u-clist f-bg f-cb f-pr j-href ga-click"]/@data-href')
            
            for item in course_list:
                # 拼接获取完整的课程链接
                link = 'https://www.icourse163.org' + item
                # 添加课程链接到保存的链接列表
                self.link_list.append(link)

            # 退出循环条件,从网页源码里面没找到某个类名,则返回为-1,进而作为当点击下一页时,如果没法点击时,则此时的返回值不为-1
            if (html.find('ux-pager_btn ux-pager_btn__next z-dis')) != -1:
                break
            
            # 模拟浏览器手动点击下一页
            self.driver.find_element_by_xpath('//li[@class="ux-pager_btn ux-pager_btn__next"]/a').click()

        # 输出课程链接及统计个数
        for each in self.link_list:
            if(self.num % 20 == 0):
                self.num2 
                print('\n' + '='*30 + '第' + str(self.num2) + '页课程链接列表' + '='*30 + '\n')
                self.num2 += 1
            self.num += 1
            print(each)

        # 输出该学科的所有课程链接的个数
        print self.num,len(self.link_list)

    def tearDown(self):
        ''' 退出方法(固定写法)'''
        
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

代码图片:

测试结果如下:

支持(0) 反对(0) silence-cc | 园豆:138 (初学一级) | 2018-07-12 17:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册