Python 2.7

IDE Pycharm 5.0.3

如有兴趣可以从如下几个开始看起,其中有我遇到的很多问题:

基础抓取(限于“豆瓣高分”选项电影及评论)请看Python自定义豆瓣电影种类,排行,点评的爬取与存储(基础)

初级抓取(限于“豆瓣电影”的各种选项,包括“热门”,“豆瓣高分”等十几个类别及评论,并打包exe)请看Python自定义豆瓣电影种类,排行,点评的爬取与存储(初级)

进阶抓取(在初级抓取基础上,套上GUI框架,图像显示更加人性化,并打包成exe)请看Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶上)

我发现了,我不是在写代码,我是在写BUG。。。

起因

不满足于豆瓣电影的各种抓取,而把魔爪伸向了豆瓣电视剧,所以整合起来了整个豆瓣影视的抓取,所以以后要不要再抓豆瓣读书啊。。。

目的

完成对豆瓣影视,包括豆瓣电影,豆瓣电视剧,豆瓣一周排行榜的自定义抓取及GUI界面设计及打包exe

方案

使用Tkinter+PhantomJS+Selenium+Firefox实现

实现过程

1.get到首页后,根据选择,点击种类,然后根据输入需求,进行排序 –这里的输入时listbox中值的点击键入

2.抓取每个电影及超链接,进入超链接后,抓取当前电影的热评及长评

3.当用户所要求TOP数目大于第一页的20个时候,点击加载更多,再出现20个电影,重复2操作。

4.将输出写入输出框架中,写入txt中等操作

实现效果

上图吧,这里第一项的影视选择键都可以实现相关操作,

这里说明一下,第一项,影视选择,第二项,类别选择(电视剧看后面项),第三项,排序方式,第四项,是否加载评论,第五项TOP多少,第六项,保存名称(需要格式为xx.txt)

GUI界面

下面是exe的版本

exe版本

已上传资源,如有需要请点击这里进行下载

代码

# -*- coding: utf-8 -*-

#Author:哈士奇说喵

#爬豆瓣高分影视及hot影评GUI完整版本

from selenium import webdriver

import selenium.webdriver.support.ui as ui

import time

from Tkinter import *

print "---------------system loading...please wait...---------------"

#获取电影名及URL

def getURL_Title():

global save_name

SUMRESOURCES=0

url="https://movie.douban.com/"

driver_item=webdriver.Firefox()

wait = ui.WebDriverWait(driver_item,15)

Class_Dict={'Movies':1,'TV':2,'TOP10 M&T':3}

#构建对应字典,方便键入值得对应关系查找

Kind_Dict={'Hot':1,'Newest/American TV':2,'Classics/UK TV':3,'Playable/Korean TV':4,'High Scores/Japanese TV':5,

'Wonderful but not popular/Chinese TV':6,'Chinese film/TVB':7,'Hollywood/Cartoon':8,

'Korea':9,'Japan':10,'Action movies':11,'Comedy':12,'Love story':13,

'Science fiction':14,'Thriller':15,'Horror film':16,'Whatever':17}

#最后一个电影老是在变啊,艹

Sort_Dict={'Sort by hot':1,'Sort by time':2,'Sort by score':3}

Ask_Dict={'*No film reviews':0,'*I like film reviews':1}

#键入的值对应,这几个键不是必须的,比如说选择TOP10 M&T时候

try:

kind=Kind_Dict[Kind_Select.get(Kind_Select.curselection()).encode('utf-8')]

sort = Sort_Dict[Sort_Select.get(Sort_Select.curselection()).encode('utf-8')]

number = int(input_Top.get())

except:

print 'if you are using TOP10 M&T ,it\'s all right\n if not,please choice kind/sort/number '

class_MT = Class_Dict[MT_Select.get(MT_Select.curselection()).encode('utf=8')]

ask_comments = Ask_Dict[Comment_Select.get(Comment_Select.curselection()).encode('utf-8')]

save_name=input_SN.get()

Ans.insert(END,"#####################################################################")

Ans.insert(END," Reloading ")

Ans.insert(END,",#####################################################################")

Ans.insert(END,"---------------------------------------system loading...please wait...------------------------------------------")

Ans.insert(END,"----------------------------------------------crawling----------------------------------------------")

Write_txt('\n##########################################################################################','\n##########################################################################################',save_name)

print "---------------------crawling...---------------------"

##############################################################################

#进行网页get后,先进行电影种类选择的模拟点击操作,然后再是排序方式的选择

#最后等待一会,元素都加载完了,才能开始爬电影,不然元素隐藏起来,不能被获取

#wait.until是等待元素加载完成!

##############################################################################

if class_MT==1:

#选完参数后,开始爬操作

driver_item.get(url)

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[%s]"%kind))

driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[%s]"%kind).click()

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div[3]/div/label[%s]"%sort))

driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div[3]/div/label[%s]"%sort).click()

num=number+1#比如输入想看的TOP22,那需要+1在进行操作,细节问题

#打开几次“加载更多”保险起见,多开一次加载

num_time = num/20+2

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list-wp']/div/a[20]"))

for times in range(1,num_time):

driver_item.find_element_by_xpath("//div[@class='list-wp']/a[@class='more']").click()

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list-wp']/div/a[%d]"%(20*(times+1))))

#使用wait.until使元素全部加载好能定位之后再操作,相当于try/except再套个while把

for i in range(1,num):

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list']/a[%d]"%num))

list_title=driver_item.find_element_by_xpath("//div[@class='list']/a[%d]"%i)

print '----------------------------------------------'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------'

print u'电影名: ' + list_title.text

print u'链接: ' + list_title.get_attribute('href')

#print unicode码自动转换为utf-8的

#防止页面出现重复错误,增加迭代修正

while list_title.text==driver_item.find_element_by_xpath("//div[@class='list']/a[%d]"%(i+20)).text:

print u'遇到页面加载重复项bug,开始重新加载...'

driver_item.quit()

getURL_Title()

#list_title.text是unicode码,需要重新编码再写入txt

list_title_wr=list_title.text.encode('utf-8')

list_title_url_wr=list_title.get_attribute('href')

#写入gui的输出框中

Ans.insert(END,'\n-------------------------------------------Movies--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------',list_title_wr,list_title_url_wr)

#写入txt中

Write_txt('\n------------------------------------------Movies--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------','',save_name)

Write_txt(list_title_wr,list_title_url_wr,save_name)

SUMRESOURCES = SUMRESOURCES +1

#获取具体内容和评论。href是每个超链接也就是资源单独的url

try:

getDetails(str(list_title.get_attribute('href')),ask_comments)

except:

print 'can not get the details!'

#爬完数据后关闭浏览器,只保留GUI进行下一步操作

driver_item.quit()

#选择电视剧之后的操作

if class_MT == 2:

#选完参数后,开始爬操作,选电视剧需要多点击一次,因为默认为电影

driver_item.get(url)

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/h2/a[2]"))

driver_item.find_element_by_xpath("//div[@class='fliter-wp']/h2/a[2]").click()

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[%s]"%kind))

driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[%s]"%kind).click()

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div[3]/div/label[%s]"%sort))

driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div[3]/div/label[%s]"%sort).click()

num=number+1#比如输入想看的TOP22,那需要+1在进行操作,细节问题

#打开几次"加载更多",因为要解决点击后页面可能重复的问题,所以这里多点一次

num_time = num/20+2

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list-wp']/div/a[20]"))

for times in range(1,num_time):

driver_item.find_element_by_xpath("//div[@class='list-wp']//a[@class='more']").click()

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list-wp']/div/a[%d]"%(20*(times+1))))

#使用wait.until使元素全部加载好能定位之后再操作,相当于try/except再套个while把

for i in range(1,num):

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list']/a[%d]"%num))

list_title=driver_item.find_element_by_xpath("//div[@class='list']/a[%d]"%i)

print '-------------------------------------------TV--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------'

print u'电视剧名: ' + list_title.text

print u'链接: ' + list_title.get_attribute('href')

#print unicode码自动转换为utf-8的

#防止页面出现重复错误,增加迭代修正

while list_title.text==driver_item.find_element_by_xpath("//div[@class='list']/a[%d]"%(i+20)).text:

print u'遇到页面加载重复项bug,开始重新加载...'

driver_item.quit()

getURL_Title()

#list_title.text是unicode码,需要重新编码再写入txt

list_title_wr=list_title.text.encode('utf-8')

list_title_url_wr=list_title.get_attribute('href')

#写入gui的输出框中

Ans.insert(END,'\n------------------------------------------TV--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------',list_title_wr,list_title_url_wr)

#写入txt中

Write_txt('\n----------------------------------------TV--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------','',save_name)

Write_txt(list_title_wr,list_title_url_wr,save_name)

SUMRESOURCES = SUMRESOURCES +1

#获取具体内容和评论。href是每个超链接也就是资源单独的url

try:

getDetails(str(list_title.get_attribute('href')),ask_comments)

except:

print 'can not get the details!'

#爬完数据后关闭浏览器,只保留GUI进行下一步操作

driver_item.quit()

#本周口碑榜TOP10

if class_MT==3:

#选完参数后,开始爬操作

driver_item.get(url)

for i in range(1,11):

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='billboard-bd']/table/tbody/tr"))

list_title=driver_item.find_element_by_xpath("//div[@class='billboard-bd']/table/tbody/tr[%d]/td[2]/a"%i)

print '----------------------------------------------'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------'

print u'影视名: ' + list_title.text

print u'链接: ' + list_title.get_attribute('href')

#print unicode码自动转换为utf-8的

#list_title.text是unicode码,需要重新编码再写入txt

list_title_wr=list_title.text.encode('utf-8')

list_title_url_wr=list_title.get_attribute('href')

#写入gui的输出框中

Ans.insert(END,'\n-------------------------------------------WeekTOP--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------',list_title_wr,list_title_url_wr)

#写入txt中

Write_txt('\n------------------------------------------WeekTOP--'+'NO' + str(SUMRESOURCES +1)+'----------------------------------------------','',save_name)

Write_txt(list_title_wr,list_title_url_wr,save_name)

SUMRESOURCES = SUMRESOURCES +1

#获取具体内容和评论。href是每个超链接也就是资源单独的url

try:

getDetails(str(list_title.get_attribute('href')),ask_comments)

except:

print 'can not get the details!'

#爬完数据后关闭浏览器,只保留GUI进行下一步操作

driver_item.quit()

##############################################################################

#当选择一部电影后,进入这部电影的超链接,然后才能获取

#同时别忽视元素加载的问题

#在加载长评论的时候,注意模拟点击一次小三角,不然可能会使内容隐藏

##############################################################################

def getDetails(url,comments):

driver_detail = webdriver.PhantomJS(executable_path="phantomjs.exe")

wait1 = ui.WebDriverWait(driver_detail,15)

driver_detail.get(url)

wait1.until(lambda driver: driver.find_element_by_xpath("//div[@id='link-report']/span"))

drama = driver_detail.find_element_by_xpath("//div[@id='link-report']/span")

print u"剧情简介:"+drama.text

drama_wr=drama.text.encode('utf-8')

#写入gui的输出框中

Ans.insert(END,drama_wr)

#写入到txt

Write_txt(drama_wr,'',save_name)

#加载评论

if comments == 1:

print "--------------------------------------------Hot comments TOP----------------------------------------------"

#加载四个短评

for i in range(1,5):

try:

comments_hot = driver_detail.find_element_by_xpath("//div[@id='hot-comments']/div[%s]/div/p"%i)

print u"最新热评:"+comments_hot.text

comments_hot_wr=comments_hot.text.encode('utf-8')

Ans.insert(END,"--------------------------------------------Hot comments TOP%d----------------------------------------------"%i,comments_hot_wr)

Write_txt("--------------------------------------------Hot comments TOP%d----------------------------------------------"%i,'',save_name)

Write_txt(comments_hot_wr,'',save_name)

except:

print 'can not caught the comments!'

#尝试加载长评

try:

driver_detail.find_element_by_xpath("//img[@class='bn-arrow']").click()

#wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='review-bd']/div[2]/div/div"))

time.sleep(1)

#解决加载长评会提示剧透问题导致无法加载

comments_get = driver_detail.find_element_by_xpath("//div[@class='review-bd']/div[2]/div")

if comments_get.text.encode('utf-8')=='提示: 这篇影评可能有剧透':

comments_deep=driver_detail.find_element_by_xpath("//div[@class='review-bd']/div[2]/div[2]")

else:

comments_deep = comments_get

print "--------------------------------------------long-comments---------------------------------------------"

print u"深度长评:"+comments_deep.text

comments_deep_wr=comments_deep.text.encode('utf-8')

#写入gui的输出框中

Ans.insert(END,"--------------------------------------------long-comments---------------------------------------------\n",comments_deep_wr)

Write_txt("--------------------------------------------long-comments---------------------------------------------\n",'',save_name)

Write_txt(comments_deep_wr,'',save_name)

except:

print 'can not caught the deep_comments!'

##############################################################################

#将print输出的写入txt中查看,也可以在cmd中查看,换行符是为了美观

##############################################################################

def Write_txt(text1='',text2='',title='douban.txt'):

with open(title,"a") as f:

for i in text1:

f.write(i)

f.write("\n")

for j in text2:

f.write(j)

f.write("\n")

def Clea():#清空函数

input_Top.delete(0,END)#这里entry的delect用0

input_SN.delete(0,END)

Ans.delete(0,END)#text中的用0.0

Ans.insert(END,"Pay Attention: ","if you are using 'Movies'or 'TV',please select all parameters,and 'TV' share the same parameters but use the latter one","if you are using 'TOP10 M&T', please select parameters with '*'",'####################################################################')

#------------------------------------------------------------------------------------------

#------------------------------------------GUI操作界面--------------------------------------

#-----------------------------------------------------------------------------------------

root=Tk()

root.title('豆瓣影视抓取器1.0--by哈士奇说喵')

frame_select=Frame(root)

title_label=Label(root,text='豆瓣影视TOP抓取器')

title_label.pack()

#---------------选择电影/电视剧-------------------

MT_Select=Listbox(frame_select,exportselection=False,width=12,height=4)

list_item1 = ['Movies','TV','TOP10 M&T']

for i in list_item1:

MT_Select.insert(END,i)

scr_MT = Scrollbar(frame_select)

MT_Select.configure(yscrollcommand = scr_MT.set)

scr_MT['command']=MT_Select.yview

#---------------选择电影/电视剧 种类-------------------

Kind_Select=Listbox(frame_select,exportselection=False,width=22,height=4)

list_item2 = ['Hot','Newest/American TV','Classics/UK TV','Playable/Korean TV','High Scores/Japanese TV',

'Wonderful but not popular/Chinese TV','Chinese film/TVB','Hollywood/Cartoon',

'Korea','Japan','Action movies','Comedy','Love story',

'Science fiction','Thriller','Horror film','Whatever']

for i in list_item2:

Kind_Select.insert(END,i)

scr_Kind = Scrollbar(frame_select)

Kind_Select.configure(yscrollcommand = scr_Kind.set)

scr_Kind['command']=Kind_Select.yview

#---------------选择电影/电视剧 排序方式-------------------

Sort_Select=Listbox(frame_select,exportselection=False,width=12,height=4)

list_item3 = ['Sort by hot','Sort by time','Sort by score']

for i in list_item3:

Sort_Select.insert(END,i)

scr_Sort = Scrollbar(frame_select)

Sort_Select.configure(yscrollcommand = scr_Sort.set)

scr_Sort['command']=Sort_Select.yview

#---------------选择电影/电视剧/本周口碑TOP10 是否加载评论-------------------

Comment_Select=Listbox(frame_select,exportselection=False,width=16,height=4)

list_item4 = ['*No film reviews','*I like film reviews']

for i in list_item4:

Comment_Select.insert(END,i)

scr_Com = Scrollbar(frame_select)

Comment_Select.configure(yscrollcommand = scr_Com.set)

scr_Com['command']=Comment_Select.yview

#---------------选择电影/电视剧 选择TOP数-------------------

Label_TOP=Label(frame_select, text='TOP(xx)', font=('',10))

var_Top = StringVar()

input_Top = Entry(frame_select, textvariable=var_Top,width=8)

#---------------选择电影/电视剧/本周口碑TOP10 保存路径-------------------

Label_SN=Label(frame_select, text='*SAVE_NAME(xx.txt)', font=('',10))

var_SN = StringVar()

input_SN = Entry(frame_select, textvariable=var_SN,width=8)

#----------------------------------------------输出框架-----------------------------------------

frame_output=Frame(root)

out_label=Label(frame_output,text='Details')

Ans = Listbox(frame_output,selectmode=MULTIPLE, height=15,width=100)#text也可以,Listbox好处在于换行

Ans.insert(END,"Pay Attention: ","if you are using 'Movies'or 'TV',please select all parameters,and 'TV' share the same parameters but use the latter one","if you are using 'TOP10 M&T', please select parameters with '*'",'####################################################################')

#点击crawl_button就进入getURL_Title(),点击clear_button就进入Clea()

crawl_button = Button(frame_output,text='crawl', command=getURL_Title)

clear_button = Button(frame_output,text='clear', command=Clea)

#纵向拖拽

scr_Out_y = Scrollbar(frame_output)

Ans.configure(yscrollcommand = scr_Out_y.set)

scr_Out_y['command']=Ans.yview

#横向拖拽

scr_Out_x = Scrollbar(frame_output,orient='horizontal')#ans x

Ans.configure(xscrollcommand = scr_Out_x.set)

scr_Out_x['command']=Ans.xview

#----------------------------------------------显示框架-----------------------------------------

#----------------选择框架显示--------------

frame_select.pack()

#影视框架显示

MT_Select.pack(side=LEFT)

scr_MT.pack(side=LEFT)

#种类框架显示

Kind_Select.pack(side=LEFT)

scr_Kind.pack(side=LEFT)

#排序框架显示

Sort_Select.pack(side=LEFT)

scr_Sort.pack(side=LEFT)

#评论框架显示

Comment_Select.pack(side=LEFT)

scr_Com.pack(side=LEFT)

#TOP输入

Label_TOP.pack()

input_Top.pack()

#SAVE NAME输入

Label_SN.pack()

input_SN.pack()

#----------------输出框架显示--------------

frame_output.pack()

out_label.pack()

crawl_button.pack(side=LEFT)

clear_button.pack(side=RIGHT)

scr_Out_y.pack(side=RIGHT)

Ans.pack()

scr_Out_x.pack()

#----------------根框架显示--------------

root.mainloop()

修复问题

相比较比上几次版本,改进了

1.删除无关的显性等待时间,直接全部靠wait.until来实现元素加载完成标识。

比如修改部分核心代码改变为如下:

#打开几次“加载更多”保险起见,多开一次加载

num_time = num/20+2

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list-wp']/div/a[20]"))

for times in range(1,num_time):

driver_item.find_element_by_xpath("//div[@class='list-wp']/a[@class='more']").click()

wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='list-wp']/div/a[%d]"%(20*(times+1))))

2.针对豆瓣页面可能存在"加载更多"之后重复页面现象,增加了自动刷新修复页面(其实就是采用迭代,自己重新加载),所以可能会遇到这种情况(详见伪解决Selenium中调用PhantomJS无法模拟点击(click)操作)

遇到页面加载重复项bug,开始重新加载...

---------------------crawling...---------------------

不用担心,这是自动在进行重加载和修复。

核心代码是

#防止页面出现重复错误,重复错误形式请看,增加迭代修正

while list_title.text==driver_item.find_element_by_xpath("//div[@class='list']/a[%d]"%(i+20)).text:

print u'遇到页面加载重复项bug,开始重新加载...'

driver_item.quit()#关闭当前页面,重新来

getURL_Title()

3.对新增TV选项,做了一些调整,代码太长,就不放上来了,可以从源码看,主要还是增加判断选项,然后和Movies照样画葫芦

4.对新增TOP10 M&T,根据其网页特性,进行点击和抓取操作,代码见源码

5.对输入的问题,因为新增的TOP10 M&T,不需要TOP多少及其他kind及sort等选项,所以增加try/except选项,可以选择输入和不输入,当然,电影和电视时候还是要输入的,不然参数都没有就跑不了了,这里会在GUI上打印出操作须知

#键入的值对应,这几个键不是必须的,比如说选择TOP10 M&T时候

try:

kind=Kind_Dict[Kind_Select.get(Kind_Select.curselection()).encode('utf-8')]

sort = Sort_Dict[Sort_Select.get(Sort_Select.curselection()).encode('utf-8')]

number = int(input_Top.get())

except:

print 'if you are using TOP10 M&T ,it\'s all right\n if not,please choice kind/sort/number '

class_MT = Class_Dict[MT_Select.get(MT_Select.curselection()).encode('utf=8')]

ask_comments = Ask_Dict[Comment_Select.get(Comment_Select.curselection()).encode('utf-8')]

save_name=input_SN.get()

还有一个问题

我能实时在cmd窗口看到抓到的数据,但是在gui的输出窗口却看不到,只能等到cmd全部跑完才可以,我也不知道问题出在哪里,可能和线程有关?我下次尝试分一个单独线程给gui跑输入,看看是不是这个问题,我想我的语句应该没有什么问题,如果有人看出问题所在了,请留言告知,谢过

致歉

对以前的版本,有很多错误,影响大家进行测试,我深表抱歉,对未充分进行测试,这锅我背,所以我花了好多时间看电影,啊,不,花了好多时间测试,大概每个都进行了TOP40+的测试,应该没有太大问题的,有时候电脑GUI会显示未响应,请不要担心,这个正常现象。

最后

我应该多读点别人的程序,闭门造车和自己研究是两回事,取长补短再深入研究才是正道。

致谢

python豆瓣电影需研究的问题_Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶下)...相关推荐

  1. python参考手册 豆瓣_Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶上)...

    Python 2.7 IDE Pycharm 5.0.3 想了想,还是稍微人性化一点,做个成品GUI出来 起因 没办法,在知乎预告了要做个GUI出来,吹的牛逼总得自己填坑,下次一定要慎重啊,话说也复习 ...

  2. Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶下)

    Python 2.7 IDE Pycharm 5.0.3 Firefox 47.0.1 如有兴趣可以从如下几个开始看起,其中有我遇到的很多问题: 基础抓取(限于"豆瓣高分"选项电影 ...

  3. Python自定义豆瓣电影种类,排行,点评的爬取与存储(高阶上)

    Python 2.7 IDE Pycharm 5.0.3 Firefox 47.0.1 豆瓣电影系列: - 基础抓取(限于"豆瓣高分"选项电影及评论)请看↓ Python自定义豆瓣 ...

  4. Python自定义豆瓣电影种类,排行,点评的爬取与存储(进阶上)

    Python 2.7  IDE Pycharm 5.0.3  Firefox 47.0.1 具体Selenium及PhantomJS请看Python+Selenium+PIL+Tesseract真正自 ...

  5. python豆瓣电影需研究的问题_python爬虫获取豆瓣电影——多线程问题

    25 May 2015 GIL全称Global Interpreter Lock(全局解释器锁),它是在实现Python解析器(CPython)时所引入的一个概念.但是它并不是Python的特性.Py ...

  6. Python爬取、存储、分析、可视化豆瓣电影Top250

    Python爬取.存储.分析.可视化豆瓣电影Top250 网站链接: https://movie.douban.com/top250 @文章目录 前言 一.python爬取目标数据,并写入csv文件 ...

  7. 6.9 用Python操控数据库(批量删除,百度新闻数据爬取与存储,写入数据时进行去重处理,pandas读取sql数据)

    学习完MySQL数据库的基本操作后,下面来学习如何用Python连接数据库,并进行数据的插入.查找.删除等操作. 6.9.1 用PyMySQL库操控数据库 上一节在phpMyAdmin 中创建了数据库 ...

  8. Python使用网络抓包的方式,利用超级鹰平台识别验证码登录爬取古诗文网、上篇--识别验证码

    Python使用网络抓包的方式,利用超级鹰平台识别验证码登录,<爬取古诗文网>. 上篇–识别验证码 序言: 哈喽,各位小可爱们,我又来了,这次我新学习到的内容是python爬虫识别验证码. ...

  9. python爬b站评论_一个简单的爬取b站up下所有视频的所有评论信息的爬虫

    心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibil ...

  10. 教你用Python爬取表情包网站下的全部表情图片

    教你用Python爬取表情包网站下的全部表情图片 又是我啦~~~ 最近上网的时候老看到有人用Python爬取表情包,心痒痒自己也整了一个. 使用到的扩展库:BeautifulSoup, request ...

最新文章

  1. 惊讶!缓存刚Put再Get居然获取不到?
  2. Ubuntu 12.10 安装 PHP
  3. zabbix服务无法启动
  4. FPGA篇(九)关于ASCII码
  5. 使用线程池有以下几个目的
  6. pta 是否完全二叉搜索树_二叉树:构造一棵搜索树
  7. python 写入excel 日期_Python实例:excel文档写入操作
  8. 《移动平台应用开发实践》教学进程(12周)
  9. 从键盘录入10个整数,统计有多少个奇数,Java基础轻松实现
  10. c语言鸽笼原理,技巧丨弄懂抽屉原理
  11. 空气质量指数,主要污染物PM10、PM2.5、CO、NO2、SO2详解
  12. 内网信息收集(手动收集本机信息)
  13. 什么是跨域?跨域解决方法
  14. AD16摆放元件丝印
  15. 【SQL 解决鸡兔同笼问题】
  16. IAR打开软件,很多文件找不到
  17. firefox网页自动翻译
  18. 微信答题赚钱每题5元,搞兼职还不如做项目!
  19. 【Vant相关知识】
  20. Docker 查看镜像信息

热门文章

  1. Openstack 简单梳理,(自用 慎点)
  2. 单幅图像去雾java_一种基于深度学习的单幅图像去雾方法与流程
  3. About Config
  4. Lattice FPGA ---IP应用总结之“edp”
  5. SAP 各种记账凭证的更改冲销
  6. 等保2.0.第十一章.等保2.0实战(下)
  7. 浅谈什么是 云原生
  8. POJ 1118 Lining Up 叉积,三点共线。
  9. thinkcmf图片上传七牛云不显示的问题(七牛图片后缀!watermark)
  10. 【数据可视化】Echarts世界地图需要的数据 - JSON格式世界国家中英文对照表