⑴ 使用python採集網頁內容時那登錄那個網站,否則採集不了!請問怎麼實現python登錄後採集網頁
有些網頁需要你登錄之後才可以訪問,你需要提供賬戶和密碼。
只要在發送http請求時,帶上含有正常登陸的cookie就可以了。
1.首先我們要先了解cookie的工作原理。
Cookie是由伺服器端生成,發送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給伺服器(前提是瀏覽器設置為啟用cookie)。Cookie名稱和值可以由伺服器端開發自己定義,對於JSP而言也可以直接寫入jsessionid,這樣伺服器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
2.之後我們要獲取到用戶正常登錄的cookie.
python提供了cookieJar的庫,只要把cookieJar的實例作為參數傳到urllib2的一個opener裡面。
然後訪問一次登錄的頁面,cookie就已經保存下來了。之後通過這個實例訪問所有的頁面都帶有正常登陸的cookie了。
以人人網為例子。
#encoding=utf-8
import urllib2
import urllib
import cookielib
def renrenBrower(url,user,password):
#登陸頁面,可以通過抓包工具分析獲得,如fiddler,wireshark
login_page = "http://www.renren.com/PLogin.do"
try:
#獲得一個cookieJar實例
cj = cookielib.CookieJar()
#cookieJar作為參數,獲得一個opener的實例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#偽裝成一個正常的瀏覽器,避免有些web伺服器拒絕訪問。
opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]
#生成Post數據,含有登陸用戶名密碼。
data = urllib.urlencode({"email":user,"password":password})
#以post的方法訪問登陸頁面,訪問之後cookieJar會自定保存cookie
opener.open(login_page,data)
#以帶cookie的方式訪問頁面
op=opener.open(url)
#讀取頁面源碼
data= op.read()
return data
except Exception,e:
print str(e)
#訪問某用戶的個人主頁,其實這已經實現了人人網的簽到功能。
print renrenBrower("http://www.renren.com/home","用戶名","密碼")
⑵ 用python抓取,為什麼有的網頁無法抓取
你的代碼理論上是適用於所有靜態網頁的
如果網頁是動態載入內容的,這種方法是不行的
最好舉個例子,哪些網站無法抓取
⑶ Python怎麼用socket讀取網站數據
是要連接到www.pythonlearn.com,然後發送請求獲取/code/intro-short.txt,這樣才行,HTTP請求格式網上應該有。
⑷ 求大神指導:用python的urllib.urlopen讀取網頁源碼的問題
我之前遇到過類似的問題,現在也沒解決。現象和你的差不多,就是在瀏覽器里邊可以正常訪問目標網址,在python解釋器或者腳本中訪問會超時。最終懷疑是windows瀏覽器設置相關的問題,樓主可以試試完整的urlopen方式:
try:
url = "http://api.themoviedb.org/3/search/person?api_key=API-KEY&query=natalie+portman"
header = { 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16' }
req = urllib2.Request(url, None, header)
f = urllib2.urlopen(req)
except urllib2.HTTPError, e:
print e.code
print e.msg
print e.header
print e.fp.read()
把模擬瀏覽器頭加進去試試。
⑸ python怎麼處理點擊「載入更多」(load more)的網頁比如:https://securingtomorrow.mcafee.com/
一般這種網站是動態載入的,通過XHR請求的參數變化更新數據。
如果不熟悉解析過程可以使用selenium的webdriver模擬抓取。
⑹ python讀取網頁,不增加訪問量
瀏覽器訪問一個網頁,不止是載入這一個網頁,還載入了 js ,圖片,或一些框架頁面。訪問量有可能在這些 js ,框架頁面,甚至 圖片上做的。你需要仔細分析一下。
⑺ 如何將python的網頁並發請求提高到50 qps
gevent + pypy不就好了……
該問題實際上比較困難, 牽扯到Linux內核機制。
⑻ python網頁打不開
一、清除DNS解析緩存
關於電腦網頁打不開怎麼回事的問題,系統一般會緩存平時常用的DNS地址,這樣能加速對網路的快速訪問,但有時候這些DNS地址由於某種原因導致不正常,這會使網頁無法正常打開,就會導致網頁無法打開。清楚DNS緩存後一般就能解決問題了。
步驟1、按住快捷鍵「Windows+R鍵」,然後在彈出的對話框中輸入「CMD」,再按 Enter鍵
步驟2、在新彈出的命令提示符窗口中輸入「ipconfig /displaydns」,便可查看到系統之前使用過的DNS地址
步驟3、再輸入命令「ipconfig /flushdns」。該命令的主要作用是清楚DNS解析緩存
步驟4、再成功刷新DNS解析緩存後,重新打開瀏覽器,打開網頁是否能正常打開網頁了呢?
二、手動設置DNS解析伺服器
若清除系統DNS解析緩存後,還不能正常打開網頁,那就有可能是當前系統使用的DNS解析伺服器出故障了。一般情況下,上網都是通過路由器自動獲取IP地址和DNS伺服器地址,所以接下來要手動設置系統的DNS解析伺服器地址。
步驟1、打開控制面板→查看網路狀態和任務→更改適配器設置;
步驟2、找到網路連接→右鍵屬性→進入本地連接屬性設置頁面
步驟3、在網路連接屬性窗口中,找到 Internet協議版本4(TCP/IPv4),然後點擊「屬性」
步驟4、在Internet協議版本4(TCP/IPv4)的屬性設置窗口中,我們選擇「使用下面的DNS伺服器地址」,並且在下面的DNS伺服器地址欄中輸入相應的DNS伺服器地址,最後點擊「確定」
⑼ 如何使用python 統計網站訪問量並生成報表
統計網站訪問量
統計出每個IP的訪問量有多少?(從日誌文件中查找)
#!/usr/bin/env python
#!coding=utf-8
list = []
f = file('/tmp/1.log')
str1 = f.readlines()
f.close()
for i in str1:
ip = i.split()[0] //split()通過指定分隔符對字元串進行切片,默認為所有的空字元;split分隔後是一個列表,[0]表示取其第一個元素;
list.append(ip)//追加
list_num = set(list)
for j in list_num:
num = list.count(j)
print '%s : %s' %(j,num)
生成報表
#_*_coding:utf-8_*_
import Mysqldb
import xlwt
from datetime import datetime
def get_data(sql):
# 創建資料庫連接.
conn = MySQLdb.connect(host='127.0.0.1',user='root'\
,passwd='123456',db='test',port=3306,charset='utf8')
# 創建游標
cur = conn.cursor()
# 執行查詢,
cur.execute(sql)
# 由於查詢語句僅會返回受影響的記錄條數並不會返回資料庫中實際的值,所以此處需要fetchall()來獲取所有內容。
result = cur.fetchall()
#關閉游標
cur.close()
#關閉資料庫連接
conn.close
# 返給結果給函數調用者。
return result
def write_data_to_excel(name,sql):
# 將sql作為參數傳遞調用get_data並將結果賦值給result,(result為一個嵌套元組)
result = get_data(sql)
# 實例化一個Workbook()對象(即excel文件)
wbk = xlwt.Workbook()
# 新建一個名為Sheet1的excel sheet。此處的cell_overwrite_ok =True是為了能對同一個單元格重復操作。
sheet = wbk.add_sheet('Sheet1',cell_overwrite_ok=True)
# 獲取當前日期,得到一個datetime對象如:(2016, 8, 9, 23, 12, 23, 424000)
today = datetime.today()
# 將獲取到的datetime對象僅取日期如:2016-8-9
today_date = datetime.date(today)
# 遍歷result中的沒個元素。
for i in xrange(len(result)):
#對result的每個子元素作遍歷,
for j in xrange(len(result[i])):
#將每一行的每個元素按行號i,列號j,寫入到excel中。
sheet.write(i,j,result[i][j])
# 以傳遞的name+當前日期作為excel名稱保存。
wbk.save(name+str(today_date)+'.xls')
# 如果該文件不是被import,則執行下面代碼。
if __name__ == '__main__':
#定義一個字典,key為對應的數據類型也用作excel命名,value為查詢語句
db_dict = {'test':'select * from student'}
# 遍歷字典每個元素的key和value。
for k,v in db_dict.items():
# 用字典的每個key和value調用write_data_to_excel函數。
write_data_to_excel(k,v)