网站群建设公司排行榜6,上海门户网,便捷网站建设,wordpress站点地址没更改寫了兩篇之后#xff0c;我覺得關於爬蟲#xff0c;重點還是分析過程分析些什么呢#xff1a;1)首先明確自己要爬取的目標比如這次我們需要爬取的是使用百度搜索之后所有出來的url結果2)分析手動進行的獲取目標的過程#xff0c;以便以程序實現比如百度#xff0c;我們先進…寫了兩篇之后我覺得關於爬蟲重點還是分析過程分析些什么呢1)首先明確自己要爬取的目標比如這次我們需要爬取的是使用百度搜索之后所有出來的url結果2)分析手動進行的獲取目標的過程以便以程序實現比如百度我們先進行輸入關鍵詞搜索然后百度反饋給我們搜索結果頁我們再一個個進行點擊查詢3)思考程序如何實現並克服實現中的具體困難那么我們就先按上面的步驟來我們首先認識到所搜引擎提供一個搜索框讓用戶進行輸入然后點擊執行我們可以先模擬進行搜索發現點擊搜索之后的完整url中有一項很關鍵如下http://www.baidu.com/s?wd搜索內容......后面的內容我們嘗試去除之后再次請求上面的url發現返回的信息一樣我們就可以斷定請求的url只需要填入wd這個參數即可接着我們就應該進行嘗試requests.get()查看是否能正常返回頁面防止百度的反爬蟲嘿幸運的是返回頁面正常哈哈~(當然如果沒有返回到正常信息只要設置好headers或者嚴格的cookies就行了)importrequestsurl http://www.baidu.com/s?wd......rrequests.get(url)print r.status_code,r.content好接下來我們就想知道怎么爬取所有的結果我么再次對url進行分析發現url中還有一項很關鍵是控制頁碼的項http://www.baidu.com/s?wd...pnx這個x是每10為一頁第一頁為0而且一共76頁也就是750最大值大於750則返回第一頁接下來我們就可以對抓取到的頁面進行分析還是使用友好的beautifulsoup我們通過分析發現我們所需要的url在標簽a中的href里而且格式是這樣http://www.baidu.com/link?url......因為還存在很多別的url混淆所以我們只需要進行一個篩選就行了而且這個獲得的url並不是我們想要的url結果這只是百度的一個跳轉鏈接但是讓我欣慰的是當我們隊這個跳轉鏈接進行get請求后直接返回get對象的url便是我們想要的結果鏈接了然后我們再次進行嘗試發現還是沒有別的反爬蟲機制哈哈本來的想法是我們是否要先進行一個對新的url返回的狀態碼進行一個篩選不是200就不行(甚至還需要些headers)但是我發現其實就算不是200我們只要返回請求對象的url就行了和能不能正常返回沒關系因為我們的目的並不是請求的頁面結果而是請求的url所以只需要全部打印出來就行了當然我建議寫一個簡單的籠統的headers寫入get這樣至少能排除一些不必要的結果接着我們請求的完整思路就差不多了上代碼#codingutf-8importrequestsimportsysimportQueueimportthreadingfrom bs4 importBeautifulSoup as bsimportreheaders{......}classbaiduSpider(threading.Thread):def __init__(self,queue,name):threading.Thread.__init__(self)self._queuequeueself._namenamedefrun(self):while notself._queue.empty():urlself._queue.get()try:self.get_url(url)exceptException,e:printepass#一定要異常處理不然中途會停下爬取的內容就不完整了defget_url(self,url):r requests.get(url url,headers headers)soup bs(r.content,html.parser)urls soup.find_all(namea,attrs{href:re.compile((.))})#for i in urls:#print i#抓取百度搜索結果中的a標簽其中href是包含了百度的跳轉地址for i inurls:if www.baidu.com/link?url in i[href]:a requests.get(url i[href],headers headers)#對跳轉地址進行一次訪問返回訪問的url就能得到我們需要抓取的url結果了#if a.status_code 200:#print a.urlwith open(E:/url/self._name.txt) as f:if a.url not inf.read():f open(E:/url/self._name.txt,a)f.write(a.url\n)f.close()defmain(keyword):namekeywordf open(E:/url/name.txt,w)f.close()queueQueue.Queue()for i in range(0,760,10):queue.put(http://www.baidu.com/s?wd%spn%s%(keyword,str(i)))threads[]thread_count 10for i inrange(thread_count):spiderbaiduSpider(queue,name)threads.append(spider)for i inthreads:i.start()for i inthreads:i.join()print Its down,sir!if __name__ __main__:if len(sys.argv) ! 2:print no keywordprint Please enter keywordsys.exit(-1)else:main(sys.argv[1])我們工具的功能就是python 123.py keyword就能將url結果寫入文件這邊sys我有話講在if __name__ __main__中先進行一個判斷如果輸入的字段是一個那么我們就返回提醒信息讓用戶進行鍵入如果是兩個那么就將第二個鍵入記為keyword進行操作當然這邊邏輯有個缺陷就是大於兩個字符會不會有別的問題(別的問題哦)值得研究一下但這不是我們這篇的重點好啦今天的百度url結果手收集就那么多啦謝謝觀看哦