python抓取动态网页( 爬取猫眼电影的应用技巧和基本知识点的抓取教程)
优采云 发布时间: 2021-09-11 19:16python抓取动态网页(
爬取猫眼电影的应用技巧和基本知识点的抓取教程)
python 网络爬虫(动态网页)
时间:2021-08-08
本文章向大家介绍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()
分析以上代码,发现没有我们需要的内容
显示最后一个
什么都解析不了,应该是用Javascript动态生成信息,所以我也学了动态Javascript抓取教程。
在 Python 中使用 Selenium 执行 JavaScript
Selenium 是一个强大的网页抓取工具,最初是为网站automated 测试而开发的。 Selenium 可以让浏览器自动加载网站,获取需要的数据,甚至可以对网页进行截图,或者判断网站上是否发生了某些操作。
安装 iSelenium
首先安装 Selenium
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 权威指南》