VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > python爬虫 >
  • python网络爬虫(动态网页)

爬取动态网页

新手入门学习爬虫,一般都是从爬豆瓣开始的。在我学会爬豆瓣后,想要爬其他网页玩玩,然后我就选取了爬取猫眼电影。像是豆瓣一样,我们进入猫眼电影,我们查看源代码,是可以看到很多我们想要的东西的,但是,用requests解析后,里面什么都没有。刚开始还以为我搞错了,然后问了别人才知道,这原来是动态网页,是需要浏览器浏览,或者是鼠标发生移动后才才会生成HTML代码的。因此,为了能够顺便爬取到我们需要的信息,需要我们借助工具来模仿用户的行为来生成HTML代码。


解析网站

在解析网站中,用的是requests库来访问,用Xpath或者BeautifulSoup来解析也都是可以的。

import requests
import lxml
from bs4 import BeautifulSoup
def get_one_page(url):
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}
        response=requests.get(url,headers=headers)
        soup = BeautifulSoup(response.text,'html.parser')
        titles = soup.find_all('title')
        print(titles)
#         if response.status_code==200:# 状态响应码为200 表示正常访问
#             return response.text
#         return None
    
def main():
    url='https://maoyan.com/board/4?offset=0'
    html=get_one_page(url)
#     print(html)
    
main()

通过上述代码解析后,发现并没有我们需要的内容

最后一样显示了</script><script src="/public/js/verify.e92127.js" type="text/javascript"></script></body></html>

解析不出什么东西,应该是采取了Javascript来动态生成信息,所以,我又学习动态Javascript的抓取教程。

在Python中用Selenium执行JavaScript

Selenium是一个强大的网页抓取工具,最初是为网站自动化测试而开发的。Selenium可以让浏览器自动加载网站,获取需要的数据,甚至对网页截屏,或者判断网站上是否发生了某些操作。

安装iSelenium

首先安装Selenium

pip install Selenium

下载PhantomJS

安装完成后,我们还需要安装PhantomJS。因为是一个功能完善(虽无开头)的浏览器,并非一个python库,所以不能pip安装

浏览器输入https://phantomjs.org/download.html


根据需要自行下载,下载完成后解压,将解压包内bin文件夹添加至环境变量

driver = webdriver.PhantomJS(executable_path=r'D:/phantomjs/phantomjs-2.1.1-windows/bin/phantomjs.exe')
driver.get('https://pythonscraping.com/pages/javascript/ajaxDemo.html')
time.sleep(3)
print(driver.find_element_by_id('content').text)
driver.close()
'''
Here is some important text you want to retrieve!
A button to click!
'''

测试完成后,即可完成安装。

网页爬取

我们设置了等待时间,因为需要等Javascript完全加载才可以获取全部信息。

代码如下:

from  selenium import  webdriver  #引入网页驱动包
import time
from selenium.webdriver.remote.webelement import WebElement
from selenium.common.exceptions import StaleElementReferenceException

def waitForLoad(driver):
    elem = driver.find_element_by_tag_name("html")
    count = 0
    while True:
        count += 1
        if count > 20:
            print('Timing out after 10 seconds and returning')
            return
        time.sleep(.5)
        try:
            elem == driver.find_element_by_tag_name('html')
        except StaleElementReferenceException:
            return
        
driver = webdriver.PhantomJS(executable_path=r'D:/phantomjs/phantomjs-2.1.1-windows/bin/phantomjs.exe')
url='https://maoyan.com/board/4?offset=0'
driver.get(url)
waitForLoad(driver)	#等待网页JavaScript加载完成
print(driver.page_source)
driver.close()	#最后要将driver关闭

网页html的部分截图。

电影成功爬取,就和爬取豆瓣一样即可。代码参考《Python网络爬虫权威指南》

本文作者:ChrisNg

本文链接:https://www.cnblogs.com/chrisng/p/15116238.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。



相关教程