python登錄豆瓣并發(fā)帖的方法
本文實(shí)例講述了python登錄豆瓣并發(fā)帖的方法。分享給大家供大家參考。具體如下:
這里涉及urllib、urllib2及cookielib常用方法的使用
登錄豆瓣,由于有驗(yàn)證碼,采取的辦法是將驗(yàn)證碼圖片下載到同目錄下,查看圖片后輸入驗(yàn)證碼即可登錄、發(fā)帖
帖子內(nèi)容寫(xiě)死在代碼中了
# -- coding:gbk --
import sys, time, os, re
import urllib, urllib2, cookielib
loginurl = 'https://www.douban.com/accounts/login'
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
params = {
"form_email":"your email",
"form_password":"your password",
"source":"index_nav" #沒(méi)有的話登錄不成功
}
#從首頁(yè)提交登錄
response=opener.open(loginurl, urllib.urlencode(params))
#驗(yàn)證成功跳轉(zhuǎn)至登錄頁(yè)
if response.geturl() == "https://www.douban.com/accounts/login":
html=response.read()
#驗(yàn)證碼圖片地址
imgurl=re.search('<img id="captcha_image" src="(.+?)" alt="captcha" class="captcha_image"/>', html)
if imgurl:
url=imgurl.group(1)
#將圖片保存至同目錄下
res=urllib.urlretrieve(url, 'v.jpg')
#獲取captcha-id參數(shù)
captcha=re.search('<input type="hidden" name="captcha-id" value="(.+?)"/>' ,html)
if captcha:
vcode=raw_input('請(qǐng)輸入圖片上的驗(yàn)證碼:')
params["captcha-solution"] = vcode
params["captcha-id"] = captcha.group(1)
params["user_login"] = "登錄"
#提交驗(yàn)證碼驗(yàn)證
response=opener.open(loginurl, urllib.urlencode(params))
''' 登錄成功跳轉(zhuǎn)至首頁(yè) '''
if response.geturl() == "http://www.douban.com/":
print 'login success ! '
print '準(zhǔn)備進(jìn)行發(fā)帖'
p={"ck":""}
c = [c.value for c in list(cookie) if c.name == 'ck']
if len(c) > 0:
p["ck"] = c[0].strip('"')
addtopicurl="http://www.douban.com/group/python/new_topic"
res=opener.open(addtopicurl)
html=res.read()
m= re.search('<input type="hidden" name="topic_id" value="(.+?)">', html)
p["topic_id"] = m.group(1)
m= re.search('<input type="hidden" name="topic_id_sig" value="(.+?)">', html)
p["topic_id_sig"] = m.group(1)
p["rev_title"] = 'title'
p["rev_text"] = 'send body'
p["rev_submit"] = '好了,發(fā)言'
request=urllib2.Request(addtopicurl)
request.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11")
request.add_header("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
request.add_header("Origin", "http://www.douban.com")
request.add_header("Referer", "http://www.douban.com/group/python/new_topic")
opener.open(request, urllib.urlencode(p))
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
- 一個(gè)簡(jiǎn)單的python爬蟲(chóng)程序 爬取豆瓣熱度Top100以?xún)?nèi)的電影信息
- 實(shí)踐Python的爬蟲(chóng)框架Scrapy來(lái)抓取豆瓣電影TOP250
- python使用urllib模塊開(kāi)發(fā)的多線程豆瓣小站mp3下載器
- python正則匹配抓取豆瓣電影鏈接和評(píng)論代碼分享
- python抓取豆瓣圖片并自動(dòng)保存示例學(xué)習(xí)
- python獲取豆瓣電影簡(jiǎn)介代碼分享
- 編寫(xiě)Python爬蟲(chóng)抓取豆瓣電影TOP100及用戶(hù)頭像的方法
- Python實(shí)現(xiàn)豆瓣圖片下載的方法
- Python爬蟲(chóng)實(shí)戰(zhàn):分析《戰(zhàn)狼2》豆瓣影評(píng)
- Python利用lxml模塊爬取豆瓣讀書(shū)排行榜的方法與分析
相關(guān)文章
python快速排序的實(shí)現(xiàn)及運(yùn)行時(shí)間比較
這篇文章主要介紹了python快速排序的實(shí)現(xiàn)及運(yùn)行時(shí)間比較,本文通過(guò)兩種方法給大家介紹,大家可以根據(jù)自己需要選擇適合自己的方法,對(duì)python實(shí)現(xiàn)快速排序相關(guān)知識(shí)感興趣的朋友一起看看吧2019-11-11
在Python中獲取操作系統(tǒng)的進(jìn)程信息
今天小編就為大家分享一篇在Python中獲取操作系統(tǒng)的進(jìn)程信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python處理中文標(biāo)點(diǎn)符號(hào)大集合
中文文本中可能出現(xiàn)的標(biāo)點(diǎn)符號(hào)來(lái)源比較復(fù)雜,通過(guò)匹配等手段對(duì)他們處理的時(shí)候需要格外小心,防止遺漏,下面小編給大家?guī)?lái)了Python處理中文標(biāo)點(diǎn)符號(hào)大集合,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05
Python ckeditor富文本編輯器代碼實(shí)例解析
這篇文章主要介紹了Python ckeditor富文本編輯器代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目啟動(dòng)說(shuō)明詳解
這篇文章主要為大家詳細(xì)介紹了Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目啟動(dòng)說(shuō)明,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
python 發(fā)送郵件的示例代碼(Python2/3都可以直接使用)
這篇文章主要介紹了python 發(fā)送郵件的示例代碼,并且Python2/3都可以直接使用,感興趣的朋友可以參考下2020-12-12
Python 實(shí)現(xiàn)取矩陣的部分列,保存為一個(gè)新的矩陣方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)取矩陣的部分列,保存為一個(gè)新的矩陣方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Python中字典的基礎(chǔ)知識(shí)歸納小結(jié)
這篇文章主要介紹了Python中字典的基礎(chǔ)知識(shí)歸納小結(jié),都是Python入門(mén)學(xué)習(xí)中的基本知識(shí),值得反復(fù)鞏固:)需要的朋友可以參考下2015-08-08

