Python爬虫類自動取得CSDNブログコレクション記事

6453 ワード

CSDNのPythonクリエイティブプログラミング活動は初日から見ていたが、自分が菜鳥だと思って「瓜を食べる大衆」になった.その後、多くの人のコードが爬虫類に関するものであることを見た.当初、私は爬虫類に興味を持って独学したPythonだった.今もこのイベントに参加するつもりです.
CSDNをよく使うので、優秀な文章をたくさんコレクションしていますが、コレクションの整理ができていないので、前にコレクションした文章を探すのは便利ではありません.研究を経て、独学の簡単なPython爬虫類で手伝ってください.
トップページに行ってみると、コレクションの文章は非同期でロードされているのではないでしょうか.しかし、毎回「もっと表示」をクリックしてこそ、後ろの内容が表示されます.
幸いなことに私も少しの非同期ロードの知識を知っていて、F 12を押して研究します:いくつかの内容を閲覧した後に
Nameの下にあるリンクをダブルクリックして開きます.
何の鬼、これは何なのか、私にはわかりません.実はこれはunicodeコードで、中国語に変えるのも簡単です.コマンドラインで変換できます.
もちろん、もっと良い方法があります.使いやすいページがあります. http://tool.chinaz.com/tools/unicode.aspx
オンライントランスコード機能を実現できます.そのページの最初の情報をコピーしてunicodeをクリックして中国語を回転すると、中国語が見えます.
そのリンクを検討してみましょう
http://my.csdn.net/my/favorite/get_favorite_list?pageno=2&pagesize=10&username=hurmishine
テストの結果、pagenoというパラメータはページの開始番号を制御し、pagesizeはページごとに表示されるデータバー数であることが分かった.
パラメータを変更することで、すべての情報を取得できます.
最終的に決定されたリンクは次のとおりです.
http://my.csdn.net/my/favorite/get_favorite_list?pageno=0&pagesize=10000&username=hurmishine
pagesizeはできるだけ大きく設定し、コレクションの実際の数がパラメータより少ない場合は実際の数で表示されます.
各データについて:
{"id":"12653825","username":"hurmishine","url":"http:\/\/blog.csdn.net\/marksinoberg\/article\/details\/70946107","domain":"blog.csdn.net","title":"CSDN \u535a\u5ba2\u5907\u4efd\u5de5\u5177 - \u66f4\u4e0a\u4e00\u5c42\u697c\uff01 - \u535a\u5ba2\u9891\u9053 - CSDN.NET","description":"","share":"1","dateline":"1493451002","map_name":""},

私にとって役に立つのはurlとtitleだけで、正規表現でマッチングすればいいです.
完全なコードは以下の通りで、具体的な詳細は自分で体得します.
#coding:utf-8
import urllib,urllib2,re,cookielib

def saveByText():
	f=open("html.html")#         
	html = f.read();
	#"url":"http:\/\/blog.csdn.net\/zhangweiguo_717\/article\/details\/52716677",
	#"title":"Python\u6a21\u62df\u767b\u5f55CSDN - \u535a\u5ba2\u9891\u9053 - CSDN.NET",
	# urls = re.findall(r'"url":"(.*?)",',html)
	# links = re.findall(r'"title":"(.*?)",',html)

	links = re.findall(r'"url":"(.*?)",.*?"title":"(.*?)"',html)
	f2=open("index.html","w")
	f2.write("<meta charset='utf-8'>\r
") index=0 for link in links : ans=link[1].decode('unicode-escape').encode('utf-8') # print ans ans=ans.replace(' - - CSDN.NET','').replace("\/",'/') # print ans url = link[0].replace("\/",'/') index+=1 f2.write('<font size="5">'+' '*10+str(index)+"、</font>"+"
<a href="+url+' target="_blank">'+'
') f2.write('<font size="5">'+ans+"</font></a><br><br><br>

") f2.close() if __name__ == '__main__': saveByText()
結果:
PS:自分も意外にも自分がそんなに多くの文章を収蔵したとは思わなかった.その间にも、缲り返した収蔵文章があることに気づいた.前のバグだろう.そして、収蔵は罪の根源かもしれない.収蔵してから见に行くと思っていた...でも実际は?
今まではほぼ完成したと言ってもいいですが、毎回コピーしなければなりません.ちょっと面倒です.もしアナログログインができたら、全自動でいいですね.でも、私はまだできません.しかし、たゆまぬ努力を経て、やっとネット上でアナログログインCSDNブログの成功コードを見つけました.
リンク先:http://blog.csdn.net/zhangweiguo_717/article/details/52716677
今回のイベントでCSDNブログをバックアップしたコードもアナログログインに関連しています.http://blog.csdn.net/Marksinoberg/article/details/70946107
自動ログインによるコレクションのコンテンツコードの取得:
#coding:utf-8
import urllib,urllib2,re,cookielib
import re
import getpass #    
UA='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36'
headers = {'User-Agent':UA}  
def login(username,password):
	#    cookie opener
	cookie = cookielib.CookieJar()
	cookieProc = urllib2.HTTPCookieProcessor(cookie)
	global opener 
	opener = urllib2.build_opener(cookieProc)
	h = opener.open('https://passport.csdn.net').read().decode("utf8")
	patten1 = re.compile(r'name="lt" value="(.*?)"')
	patten2 = re.compile(r'name="execution" value="(.*?)"')
	b1 = patten1.findall(h)
	b2 = patten2.findall(h)
	global postData
	postData = {
	    'username': username,
	    'password': password,
	    'lt': b1[0],
	    'execution': b2[0],
	    '_eventId': 'submit',
	}
	
	postData= urllib.urlencode(postData)

	opener.addheaders = [('User-Agent',UA),
	                     ('Referer', 'https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn')
	                     ]
	response = opener.open('https://passport.csdn.net', data=postData)
	# response2 = opener.open('http://my.csdn.net/my/fans')  
	# text2 = response2.read()
	# print text2

def autoSave(username):
	url='http://my.csdn.net/my/favorite/get_favorite_list?pageno=0&pagesize=10000&username=hurmishine'
	# req = urllib2.Request(url=url.format(username),headers=headers)  
	# html = urllib2.urlopen(req).read()
	html = opener.open(url.format(username), data=postData).read()
	links = re.findall(r'"url":"(.*?)",.*?"title":"(.*?)"',html)
	f2=open("index.html","w")
	f2.write("<meta charset='utf-8'>\r
") index=0 flag='' print len(links) for link in links : ans=link[1].decode('unicode-escape').encode('utf-8') ans=ans.replace(' - - CSDN.NET','').replace("\/",'/') url = link[0].replace("\/",'/') index+=1 print ans,url f2.write('<font size="5">'+' '*10+str(index)+"、</font>"+"
<a href="+url+' target="_blank">'+'
') f2.write('<font size="5">'+ans+"</font></a><br><br><br>

") f2.close() if __name__ == '__main__': username="" password="" login(username,password) autoSave(username)

さあ、そうしましょう.
コレクションのコードを自動的に取得し、アップロードした47行に問題があり、コメント部分は削除するのを忘れ、上のコードは修正された.
参考ブログ:http://blog.csdn.net/haichao062/article/details/8107316 http://blog.csdn.net/devil_2009/article/details/38796533