Ⅰ python爬蟲怎麼獲取下一頁的URL和網頁內容
用瀏覽器調試工具,如firebug,查看點擊下一頁時的http請求,再用python模擬就行了。
Ⅱ 如何評價利用python製作數據採集,計算,可視化界面呢
先來設置兩個url地址,第一個用於第一次訪問,這樣可以獲得網站伺服器發來的cookie,第二個網址是用於登陸的地址
引入兩個模塊,cookielib和urllib2
接著,我們安裝一個cookie處理器,代碼如下,這個代碼很多人不太能讀懂,其實你會用就可以了,他們就是這個固定的形式,頂多改改變數的名字。你復制下來以後自己用就可以了,用多了,你再去看代碼的意義,你就都懂了。
然後我們先訪問一下網站,獲得一個cookie,你不用管這個cookie該怎麼弄,前面設置的cookie處理器會自動處理。
接著,我們寫一下postdata,也就是你要post的數據,因為我們打算登陸網站,所以postdata里肯定有用戶名和密碼,那麼怎麼知道該怎麼寫postdata呢?看你抓包得到的post數據。下面第一幅圖是httpwatch抓包截圖,點擊postdata,看到post的數據,然後我們看第二幅圖,就是python的寫法。你自己感受一下。
寫完postdata以後,我們 要將postdata轉碼一下,讓伺服器可以解讀postdata數據
接著設置headers信息,headers也是抓包得到的。同樣的方式,你去寫header內的信息
然後我們通過request方法來登陸網站,並返回數據,返回的數據存儲在request中
通過rulopen方法和read方法來讀取數據,並列印出來。
我們看到輸出的結果,這說明我們雖然正確的模擬了登陸網站需要的post信息,但是沒有考慮到登陸網站是需要驗證碼的,後期我們會看到如何處理驗證碼,如果你拿這個教程去處理沒有驗證碼的登陸問題,那麼你現在已經成功了。
Ⅲ 如何用Python寫一個抓取url不變網頁的爬蟲
兄弟,你有去試著寫過一個爬蟲嗎?那我來教你好了。
我點開了你給我的網址,點了你所說的《進口分貿易商明細》,看他的url並沒有改變是嘛? 0 0 我k 為什麼,這么詭異,那我們用chrome 按下F12看看他到底搞了什麼鬼 ,如下圖:
奧,原來他這是一個內嵌頁面。我們把這條url在另一個tab裡面打開看看。
誒,貌似跟普通網頁沒什麼區別了嘛?看看源代碼,這些數據是不是js寫進去的,貌似也不是啊,都是扎扎實實的數據在整個html裡面。
那題主這些數據的採集你總會了吧。
不不不,那個翻頁 url不是還沒改變嘛????
那你再按下F12 看看我翻頁又請求了什麼??
搜嘎,原來如此,那以後只用對這個action 去post 這個data就可以實現翻頁了嘛,很簡單嘛。
那你怎麼做就看你的咯~
Ⅳ python多線程探測url地址
建立一個名為url.txt的文件,將需要批量測試的url放此文件中,執行腳本就看可以了。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
Ⅳ 想請問python大神一個問題。 我想用python通過外鏈爬取網站主頁url.就好比
我進某個網址 我是記得地址的 但是我不會直接打地址進去 我會用網路搜索進去 我進網路也一樣 用其它搜索網站搜網路然後進去。
Ⅵ 如何用最簡單的Python爬蟲採集整個網站
在之前的文章中Python實現「維基網路六度分隔理論「之基礎爬蟲,我們實現了在一個網站上隨機地從一個鏈接到另一個鏈接,但是,如果我們需要系統地把整個網站按目錄分類,或者要搜索網站上的每一個頁面,我們該怎麼辦?我們需要採集整個網站,但是那是一種非常耗費內存資源的過程,尤其是處理大型網站時,比較合適的工具就是用一個資料庫來存儲採集的資源,之前也說過。下面來說一下怎麼做。
網站地圖sitemap
網站地圖,又稱站點地圖,它就是一個頁面,上面放置了網站上需要搜索引擎抓取的所有頁面的鏈接(註:不是所有頁面,一般來說是所有文章鏈接。大多數人在網站上找不到自己所需要的信息時,可能會將網站地圖作為一種補救措施。搜索引擎蜘蛛非常喜歡網站地圖。
對於SEO,網站地圖的好處:
1.為搜索引擎蜘蛛提供可以瀏覽整個網站的鏈接簡單的體現出網站的整體框架出來給搜索引擎看;
2.為搜索引擎蜘蛛提供一些鏈接,指向動態頁面或者採用其他方法比較難以到達的頁面;
3.作為一種潛在的著陸頁面,可以為搜索流量進行優化;
4.如果訪問者試圖訪問網站所在域內並不存在的URL,那麼這個訪問者就會被轉到「無法找到文件」的錯誤頁面,而網站地圖可以作為該頁面的「准」內容。
數據採集
採集網站數據並不難,但是需要爬蟲有足夠的深度。我們創建一個爬蟲,遞歸地遍歷每個網站,只收集那些網站頁面上的數據。一般的比較費時間的網站採集方法從頂級頁面開始(一般是網站主頁),然後搜索頁面上的所有鏈接,形成列表,再去採集到的這些鏈接頁面,繼續採集每個頁面的鏈接形成新的列表,重復執行。
很明顯,這是一個復雜度增長很快的過程。加入每個頁面有10個鏈接,網站上有5個頁面深度,如果採集整個網站,一共得採集的網頁數量是105,即100000個頁面。
因為網站的內鏈有很多都是重復的,所以為了避免重復採集,必須鏈接去重,在Python中,去重最常用的方法就是使用自帶的set集合方法。只有「新」鏈接才會被採集。看一下代碼實例:
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages = set()def getLinks(pageurl):globalpageshtml= urlopen("" + pageurl)soup= BeautifulSoup(html)forlink in soup.findAll("a", href=re.compile("^(/wiki/)")):if'href' in link.attrs:iflink.attrs['href'] not in pages:#這是新頁面newPage= link.attrs['href']print(newPage)pages.add(newPage)getLinks(newPage)getLinks("")
原理說明:程序執行時,用函數處理一個空URL,其實就是維基網路的主頁,然後遍歷首頁上每個鏈接,並檢查是否已經在全局變數集合pages裡面,如果不在,就列印並添加到pages集合,然後遞歸處理這個鏈接。
遞歸警告:Python默認的遞歸限制是1000次,因為維基網路的鏈接浩如煙海,所以這個程序達到遞歸限制後就會停止。如果你不想讓它停止,你可以設置一個遞歸計數器或者其他方法。
採集整個網站數據
為了有效使用爬蟲,在用爬蟲的時候我們需要在頁面上做一些事情。我們來創建一個爬蟲來收集頁面標題、正文的第一個段落,以及編輯頁面的鏈接(如果有的話)這些信息。
第一步,我們需要先觀察網站上的頁面,然後制定採集模式,通過F12(一般情況下)審查元素,即可看到頁面組成。
觀察維基網路頁面,包括詞條和非詞條頁面,比如隱私策略之類的頁面,可以得出下面的規則:
所有的標題都是在h1→span標簽里,而且頁面上只有一個h1標簽。
所有的正文文字都在div#bodyContent標簽里,如果我們想獲取第一段文字,可以用div#mw-content-text→p,除了文件頁面,這個規則對所有頁面都適用。
編輯鏈接只出現在詞條頁面上,如果有編輯鏈接,都位於li#ca-edit標簽的li#ca-edit→span→a裡面。
調整一下之前的代碼,我們可以建立一個爬蟲和數據採集的組合程序,代碼如下:
import redef getLinks(pageUrl):global pageshtml = urlopen("" + pageUrl)soup = BeautifulSoup(html)try:print(soup.h1.get_text())print(soup.find(id="mw-content-text").findAll("p")[0])print(soup.find(id="ca-edit").find("span").find("a").attrs['href'])except AttributeError:print("頁面缺少屬性")for link in soup.findAll("a", href =re.compile("^(/wiki/)")):if 'href' in link.attrs:#這是新頁面newPage = link.attrs['href']print("------------------\n"+newPage)
這個for循環和原來的採集程序基本上是一樣的,因為不能確定每一頁上都有所有類型的數據,所以每個列印語句都是按照數據在頁面上出現的可能性從高到低排列的。
數據存儲到MySQL
前面已經獲取了數據,直接列印出來,查看比較麻煩,所以我們就直接存到MySQL裡面吧,這里只存鏈接沒有意義,所以我們就存儲頁面的標題和內容。前面我有兩篇文章已經介紹過如何存儲數據到MySQL,數據表是pages,這里直接給出代碼:
import reimport datetimeimport randomimport pymysqlconn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '19930319', db = 'wiki', charset ='utf8mb4')cur = conn.cursor()cur.execute("USE wiki")#隨機數種子random.seed(datetime.datetime.now())#數據存儲def store(title, content):cur.execute("INSERT INTO pages(title, content)VALUES(\"%s\", \"%s\")", (title, content))cur.connection.commit()def getLinks(articleUrl):html = urlopen("" + articleUrl)title = soup.find("h1").get_text()content =soup.find("div",{"id":"mw-content-text"}).find("p").get_text()store(title, content)returnsoup.find("div",{"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))#設置第一頁links =getLinks("/wiki/Kevin_Bacon")try:while len(links)>0:newArticle = links[random.randint(0, len(links)-1)].attrs['href']print (newArticle)links = getLinks(newArticle)finally:cur.close()conn.close()
小結
今天主要講一下Python中遍歷採集一個網站的鏈接,方便下面的學習。
希望通過上面的操作能幫助大家。如果你有什麼好的意見,建議,或者有不同的看法,我都希望你留言和我們進行交流、討論。
Ⅶ python scrapy 利用selenium模擬登錄每個採集一個url都要打開瀏覽器,速度很慢,如何解決
零. 在用scrapy爬取數據中,有寫是通過js返回的數據,如果我們每個都要獲取,那就會相當麻煩,而且查看源碼也看不到數據的,所以能不能像瀏覽器一樣去操作他呢?
所以有了->
Selenium 測試直接在瀏覽器中運行,就像真實用戶所做的一樣。Selenium 測試可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中運行。其他測試工具都不能覆蓋如此多的平台。使用 Selenium 和在瀏覽器中運行測試還有很多其他好處。
Ⅷ python如何批量抓取很多url的信息 求大佬 代碼
可將很多url放在一個列表中,然後用循環語句遍歷。代碼如下:
urls=[url1,url2,url3]
for u in urls:
requests.get(u)
txt=r.text
Ⅸ 使用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","用戶名","密碼")
Ⅹ BAE Python 如何獲取 url
使用urllib.parse.urlparse(url).hostname獲取域名,通過socket.gethostbyname(域名)獲取IP地址,再通過socket.gethostbyaddr(ip地址就可以得到)真實的hostname了。代碼示例python3.x:import urllib.parseimport socketurl = '你要獲取的網址'ym = urllib.parse.urlparse(url).hostnameprint(ym)ip = socket.gethostbyname(ym)print(ip)hn = socket.gethostbyaddr(ip)print(hn[0])效果: