python抓取动态网页(电影成功爬取,就和爬取豆瓣一样即可(图))

优采云 发布时间: 2021-10-19 20:03

  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()

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

  

  最后一个显示

  我无法解析任何东西。应该是Javascript是用来动态生成信息的。因此,我学习了动态Javascript爬虫教程。

  在 Python 中使用 Selenium 执行 JavaScript

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

  安装 iSelenium

  首先安装硒

  pip install Selenium

  下载 PhantomJS

  安装完成后,我们还需要安装PhantomJS。因为是全功能(虽然没有开头)的浏览器,不是python库,所以不能通过pip安装

  浏览器输入

  

  根据需要下载,下载后解压,将解压包中的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 Web Crawler 权威指南》

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线