绪论

首先写这个文章的时候仅仅花了2个晚上(我是菜鸟所以很慢),自己之前略懂selenium,但是不是很懂csv,这次相当于练手了。

第一章 环境介绍

具体实验环境
系统 Windows10教育版 1709版本
python  3.6.3 
Selenium  3.12.0
bs4  0.0.1
csv  1.0

第二章 过程

这里是一份利用Selenium写成的爬取猫眼电影top100的代码,具体没有什么好讲的,以下我会提几个需要注意的地方。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import csv def get_html(url):
browser.get(url)
return browser.page_source
def content_print(pagesource):
soup = BeautifulSoup(pagesource,"html.parser")
films = soup.find_all("dd")
film_list= []
for film in films:
name =film.find("a")
haha =name["title"]
#print(haha) stars =film.find("p",class_ = "star")
#print(stars.text) date = film.find("p",class_ = "releasetime").string score_1 = film.find("i",class_ = "integer")
score_2 = film.find("i",class_ = "fraction")
score = score_1.text + score_2.text
#print(score)
film_list.append([haha,date,score])
print(film_list)
if __name__ == '__main__':
browser = webdriver.Chrome()
for i in range(0,10):
houzhui = str(10 * i) initial_url = "http://maoyan.com/board/4?offset=" + houzhui
html = get_html(initial_url)
content_print(html)
browser.close()

文件头的部分,“from selenium import webdriver
from selenium.webdriver.common.keys import Keys”这里已经引入了Selenium但是下一句又引入了里面的一些库,这里是为了在效率方面使得整个工程变得变得更加效率,实际上如果不加上下一句,是不能运行的。
    整个代码的结构是先创建一个browser实例,然后遍历10个页面去获取HTML代码,然后把得到的HTML代码返回到content_print中来做进一步的分析,打印以及写入到csv中。最后关闭整个browser。这个过程必须在结构上先验证无误,然后在写具体的代码。
    content_print(pagesource)这里是代码的核心部分。这里的“films = soup.find_all("dd")”dd是每个页面中每一个电影信息所在的地方,我们把他放入到“film_list= []”中,然后分别用“.find”函数以及class选择器来提取我们想要的内容,最后通过“film_list.append([haha,date,score])”放入到这个list中,这里基本及时把10页的电影信息写入到了一个list。

以上是这段代码的具体功能。

接下来我在写入csv的时候写了一段代码,这是对一个页面得到的信息进行写入的代码:

import pandas as pd

infos = [['霸王别姬', '上映时间:1993-01-01(中国香港)', '9.6'], ['肖申克的救赎', '上映时间:1994-10-14(美国)', '9.5'], ['罗马假日', '上映时间:1953-09-02(美国)', '9.1'], ['这个杀手不太冷', '上映时间:1994-09-14(法国)', '9.5'], ['教父', '上映时间:1972-03-24(美国)', '9.3'], ['泰坦尼克号', '上映时间:1998-04-03', '9.5'], ['龙猫', '上映时间:1988-04-16(日本)', '9.2'], ['唐伯虎点秋香', '上映时间:1993-07-01(中国香港)', '9.2'], ['魂断蓝桥', '上映时间:1940-05-17(美国)', '9.2'], ['千与千寻', '上映时间:2001-07-20(日本)', '9.3']]

list = []
for x in range(0,10):
for y in range(0,3):
#print(infos[x][y])
list.append(infos[x][y])
names = []
for name in range(0,30,3):
names.append(list[name])
#print(names) dates = []
for date in range(1,30,3):
dates.append(list[date])
#print(dates) grades = []
for grade in range(2,30,3):
grades.append(list[grade])
#print(grades) dateframe = pd.DataFrame({'Movies':names,'Dates':dates,'Scores':grades})
#输出顺序是怎样的?为什么不是按照我设置的顺序?
dateframe.to_csv('C:/Users/zhengyong/Desktop\/study/csv.csv',index=False,sep=',',encoding = "gbk")前写入的list放入infos,然后新建一个“list = []”,然后利用两个for把list里的list的信息写到一个list里,然后再分别把信息取出来,然后再利用“pd.DataFrame”写到csv中。
前写入的list放入infos,然后新建一个“list = []”,然后利用两个for把list里的list的信息写到一个list里,然后再分别把信息取出来,然后再利用“pd.DataFrame”写到csv中。

这里我引入了pandas进行写入操作。
    先把我们之前写入的list放入infos,然后新建一个“list = []”,然后利用两个for把list里的list的信息写到一个list里,然后再分别把信息取出来,然后再利用“pd.DataFrame”写到csv中。

代码总体而言是比较傻瓜式的,最重要的问题是会在重复写入的时候覆盖之前写入的文件,所以接下来我会做一个新的页面功能(这段代码里的具体参数实在太多,我没找到可以使他不覆盖的方法)。

以下就是改进版本:

import pandas as pd
import csv infos = [['霸王别姬', '上映时间:1993-01-01(中国香港)', '9.6'], ['肖申克的救赎', '上映时间:1994-10-14(美国)', '9.5'], ['罗马假日', '上映时间:1953-09-02(美国)', '9.1'], ['这个杀手不太冷', '上映时间:1994-09-14(法国)', '9.5'], ['教父', '上映时间:1972-03-24(美国)', '9.3'], ['泰坦尼克号', '上映时间:1998-04-03', '9.5'], ['龙猫', '上映时间:1988-04-16(日本)', '9.2'], ['唐伯虎点秋香', '上映时间:1993-07-01(中国香港)', '9.2'], ['魂断蓝桥', '上映时间:1940-05-17(美国)', '9.2'], ['千与千寻', '上映时间:2001-07-20(日本)', '9.3']] list = []
for x in range(0,10):
for y in range(0,3):
#print(infos[x][y])
list.append(infos[x][y])
#print(list) names = []
for n in range(0,30,3):
for i in range(n,n+3):
#print(list[i])
names.append(list[i])
print(names) # csv 写入
#names = ['marry', 26]
# 打开文件,追加a
out = open('C:/Users/zhengyong/Desktop/study/Stu_csv.csv', 'a', newline='') # 设定写入模式
csv_write = csv.writer(out, dialect='excel')
# 写入具体内容
csv_write.writerow(names)
print( str(n/3) + "times to write in the Excel!")
names = []

其中有一段代码我得具体说说,

names = []   #新建一个names[]
for n in range(0,30,3):
for i in range(n,n+3):
#print(list[i]) #每三个一组,把30个遍历完
names.append(list[i]) 添加到names
print(names)

这段代码实际上是把一个list分成了好多个(10)新的list,名字为names,然后再去写入,再继续下一组。。。

第三章 最终成品

'''这个版本能够爬出拥有10页的电影信息的具体信息,
并将这些信息写在Excel中。整个过程是批量化的,输入参数无需干预。''' from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import csv def get_html(url):
browser.get(url)
return browser.page_source
def content_print(pagesource):
soup = BeautifulSoup(pagesource,"html.parser")
films = soup.find_all("dd")
infos= []
for film in films:
name =film.find("a")
haha =name["title"]
#print(haha) stars =film.find("p",class_ = "star")
#print(stars.text) date = film.find("p",class_ = "releasetime").string score_1 = film.find("i",class_ = "integer")
score_2 = film.find("i",class_ = "fraction")
score = score_1.text + score_2.text
#print(score)
infos.append([haha,date,score])
print(infos) list = []
for x in range(0, 10):
for y in range(0, 3):
# print(infos[x][y])
list.append(infos[x][y])
# print(list) names = []
for n in range(0, 30, 3):
for i in range(n, n + 3):
# print(list[i])
names.append(list[i])
print(names) # csv 写入
#names = ['marry', 26] # 打开文件,追加a
out = open('C:/Users/zhengyong/Desktop/study/csv.csv', 'a', newline='') # 设定写入模式
csv_write = csv.writer(out, dialect='excel')
# 写入具体内容
csv_write.writerow(names)
print(str(n / 3) + "times to write in the Excel!")
names = [] if __name__ == '__main__':
browser = webdriver.Chrome()
for i in range(0,10):
houzhui = str(10 * i)
initial_url = "http://maoyan.com/board/4?offset=" + houzhui
html = get_html(initial_url)
content_print(html)
browser.close()

Selenium爬取电影网页写成csv文件的更多相关文章

  1. 使用htmlparse爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  2. 使用htmlparser爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  3. Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...

  4. Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库

    前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...

  5. 使用scrapy爬取的数据保存到CSV文件中,不使用命令

    pipelines.py文件中 import codecs import csv # 保存到CSV文件中 class CsvPipeline(object): def __init__(self): ...

  6. python将文件写成csv文件保存到本地

    举个例子: import csv import os path='/tmp/' file='test.csv' def generate_csv(path,file): if not os.path. ...

  7. scrapy框架 + selenium 爬取豆瓣电影top250......

    废话不说,直接上代码..... 目录结构 items.py import scrapy class DoubanCrawlerItem(scrapy.Item): # 电影名称 movieName = ...

  8. 爬虫系列(十三) 用selenium爬取京东商品

    这篇文章,我们将通过 selenium 模拟用户使用浏览器的行为,爬取京东商品信息,还是先放上最终的效果图: 1.网页分析 (1)初步分析 原本博主打算写一个能够爬取所有商品信息的爬虫,可是在分析过程 ...

  9. Python+Selenium爬取动态加载页面(1)

    注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...

随机推荐

  1. 洛谷P4155 BZOJP4444 [SCOI2015]国旗计划

    自己做出来的第一道倍增(fake) 原题链接 看到题目,贪心水题!不仅思维难度低,代码也好(难)写,三下五除二就写了出来,过了样例.但是一交,只有40pts.一道紫题能让我快速水40pts,良心出题人 ...

  2. [再寄小读者之数学篇](2014-06-20 求极限---Jordan 不等式的应用)

    证明: 当 $\lm<1$ 时, $\dps{\lim_{R\to+\infty} R^\lm\int_0^{\pi/2} e^{-R\sin\tt}\rd \tt=0}$. 证明: 由 $$\ ...

  3. IDEA15 下运行Scala遇到问题以及解决办法

    为了让Scala运行起来还是很麻烦,为了大家方便,还是记录下来: 1.首先我下载的是IDEA的社区版本,版本号为15. 2.下载安装scala插件: 2.1 进入设置菜单. 2.2 点击安装JetBr ...

  4. sql server的sysobjects表中xtype字段值的含义

    xtype字段包含的值的意思如下: AF = Aggregate function (CLR) 聚合函数(CLR)  C = CHECK constraint CHECK约束  D = Default ...

  5. Lua中的语句

    [赋值] 赋值的基本含义是修改一个变量或一个table中字段的值,这个和其它语言没有多少区别,但是对于Lua,有一个特性,它允许“多重赋值”,也就是一下子将多个值赋予多个变量,例如以下代码: , pr ...

  6. C“控制”Lua

    [前言] 写过Windows程序的人都知道,对于应用程序,如果需要在本地保存一些配置信息,我们经常将这些配置信息写在注册表或者本地的配置文件中,很多应用都是将一些配置信息写在配置文件中,比如以ini结 ...

  7. CSP应用开发-CryptAPI函数库介绍

    基本加密函数为开发加密应用程序提供了足够灵活的空间.所有CSP的通讯都是通过这些函数.一个CSP是实现所有加密操作的独立模块.在每一个应用程序中至少需要提供一个CSP来完成所需的加密操作.如果使用多于 ...

  8. jarvis level6_x64堆溢出unlink拾遗

    level6 32位的我没有调出来,貌似32位的堆结构和64位不太一样,嘤嘤嘤?,所以做了一下这个64位的,题目地址,level6_x64 首先看一下程序的结构体 struct list //0x18 ...

  9. Copley-STM32串口+CANopen实现双电机力矩同步

    原来有个CANopen的主站卡,现在没了,只有单片机,用单片机来制作一个CANopen的主站卡貌似不是很难,但是需要时间.无奈仔细看了一个Copley的说明,决定采用CAN口+串口来实现之前的功能. ...

  10. Python-Django-Ajax

    什么是Ajax: 通过js语言跟后台进行交互的一个东西 -特点:异步,局部刷新 ajax往后台提交数据 $.ajax({ url:'请求的地址', type:'get/post', data:{key ...