美文网首页tool for work
python操控chrome抓网页

python操控chrome抓网页

作者: 何小有 | 来源:发表于2019-01-28 19:34 被阅读61次

    通过chrome浏览器直接打开目标网站,然后直接抓取里面的前端代码,可以让我们不必分析、破解目标网站的接口加密规则,因为对于非目标网站的内部人员来说,这个工作可没有那么简单。

    首先要了解的是,WebDriver是一个开源工具,用于跨多个浏览器自动测试Web应用程序,它提供了导航到网页、用户输入、JavaScript执行等功能。

    Python的Selenium库是WebDriver的Python语言实现,用于浏览器交互的自动化。使用WebDriver进行自动化操作比较麻烦的地方是,使用什么浏览器就需要下载相应的driver文件,即浏览器驱动:

    下面的内容使用的是Chrome驱动,Chrome驱动与Chrome浏览器有对应关系,具体映射关系可以在Chrome驱动目录下查看,但是最好的方法是更新Chrome至最新版本,再下载最新的Chrome驱动。

    接下来我们在任意目录下创建一个tools123的文件夹,并把刚才下载的Chrome驱动放到这里来,再创建一个tools123.py的文件,在该文件下输入下面的代码:

    from selenium import webdriver
    from os import getcwd,sep
    
    # 当前进程的工作目录
    cwd = getcwd()
    # 设置chrome驱动器
    driver = webdriver.Chrome(f'{cwd}{sep}chromedriver')
    # 设置超时时间
    driver.set_page_load_timeout(13)
    
    # 推出驱动并关闭所关联的所有窗口
    driver.quit()
    

    执行上面代码后,如果正常的话,电脑会打开一个Chrome浏览器窗口,然后又马上关闭了。下面我们可以试一下访问百度新闻并搜索关键词:

    …………
    from time import sleep
    
    …………
    …………
    …………
    
    # 访问
    driver.get('http://news.baidu.com/')
    # 等待几秒
    sleep(3)
    
    # 清空文本框的内容
    driver.find_element_by_name('word').clear()
    # 输入文本内容
    driver.find_element_by_name('word').send_keys('百度')
    # 点击按钮
    driver.find_element_by_id("s_btn_wr").click()
    
    # 等待几秒
    sleep(3)
    
    # 推出驱动并关闭所关联的所有窗口
    driver.quit()
    

    再执行一下代码,电脑打开Chrome浏览器窗口后,会访问百度新闻,然后输入“百度”,点击搜索按钮。接下来我们就可以爬页面的内容,不过我们还需要借助Python的Beautiful Soup库,它可以轻松从网页上抓取信息,提供用于迭代、搜索和修改解析树的功能。

    下面我们就可以开始获取今天有关“百度”的热点新闻了:

    …………
    from bs4 import BeautifulSoup
    
    …………
    …………
    …………
    
    # 等待几秒
    sleep(3)
    
    # 获得网页内容
    summaryPage = driver.page_source
    # 解析HTML内容
    summaryObj = BeautifulSoup(summaryPage, 'html.parser')
    # 通过Class获取内容
    summaryObjContent = summaryObj.find_all(attrs={'class':'c-title'})
    
    for i in range(len(summaryObjContent)):
        # 查找出一个a标签
        aObj = summaryObjContent[i].find('a')
        # 查a标签的href值
        href = aObj['href']
        # 标签<a>中含有其他标签,用k.get_text()
        # strip()方法,去除字符串开头或者结尾的空格
        title = aObj.get_text().strip()
        
        print(title+'\n'+href+'\n')
    
    # 推出驱动并关闭所关联的所有窗口
    driver.quit()
    

    最后上一个效果图哈!

    效果图

    相关文章

      网友评论

        本文标题:python操控chrome抓网页

        本文链接:https://www.haomeiwen.com/subject/hzqajqtx.html