好了,直接进入正题。
准备工作:
1. 先安装selenium库没什么问题,pip install 这样子;
2.再就是下载PhantomJS无头浏览器,可以去官网下载http://phantomjs.org/download.html,下载出来把phantomjs.exe文件放到python目录下(和Scripts同级)。
开始写代码:
1.引用需要用到的库:
from selenium import webdriver
import time
2.利用user-agent代理并启动PhantomJS浏览器:
header = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36'}
headers = header
driver = webdriver.PhantomJS()
3.抓取电影信息:
def getMovieInfo(url):
driver.get(url)
#创建容器储存一会儿抓取回来的信息
movie_info = []
#利用selenium库元素定位方法driver.find_element(s)........根据css选择器进行分析抓取出rank,name,starring的信息,具体方法请参考https://blog.csdn.net/bananasssss/article/details/51316369
Rank = driver.find_elements_by_css_selector(".board-wrapper i.board-index")
Name = driver.find_elements_by_class_name("name")
Starring = driver.find_elements_by_css_selector(".star")
#分析页面内容,每页有十个电影,遍历以将其全部储存到最开始创建的容器中
for i in range(10):
movie_info.append([Rank[i].text,Name[i].text,Starring[i].text])
return movie_info
4.返回结果并格式化输出:
def printResult(movie_info):
for i in range(10):
m = movie_info[i]
print("{:^10}\t{:^15}\t{:^25}\n".format(m[0],m[1],m[2]))
5.定义主函数:
def main():
print("{:^10}\t{:^15}\t{:^25}\n".format("排名","电影名称","主演"))
#观察不同页数的url可以发现,只有offset后边的数字发生了有规律的变化,所以可以根据这个来遍历所有页数
for offset in range(10):
offset = offset*10
#更新链接以用于下次访问新的页
url = "http://maoyan.com/board/4?offset=" + str(offset)
#设置等待时间
time.sleep(0.5)
#调用输出函数打印出结果
printResult(getMovieInfo(url))
#关闭PhantomJS浏览器
driver.quit()
main()
最后再说一下程序运行过程中可能会出现的一个warning,就是selenium和PhantomJS的版本不符,有强迫症的朋友需要将selenium库进行降级。
降级操作:
1.卸载当前版本的selenium:用pip uninstall selenium命令
2.安装适合于PhantomJS版本的selenium库:pip install selenium==2.48.0