PyHacker編寫URL批量采集器
喜歡用Python寫腳本的小伙伴可以跟著一起寫一寫呀。
編寫環(huán)境:Python2.x
00x1:需要用到的模塊
需要用到的模塊如下:
import requests import re
本文將用re正則進(jìn)行講解,如果你用Xpath也可以
00x2:選取搜索引擎
首先我們要選取搜索引擎(其他搜索引擎原理相同)
以bing為例:Cn.bing.com
首先分析bing翻頁(yè)機(jī)制:
https://cn.bing.com/search?q=內(nèi)容&first=0 第一頁(yè) https://cn.bing.com/search?q=內(nèi)容&first=10 第二頁(yè) https://cn.bing.com/search?q=內(nèi)容&first=20 第三頁(yè)
頁(yè)數(shù) = First*10
分析完畢,我們來(lái)請(qǐng)求看一下
def req(): url = 'https://cn.bing.com/search?q=小陳&first=0' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'} req = requests.get(url,headers=headers) html = req.content print html
Ok,沒(méi)毛病
00x3:分析需要采集的url
分析需要采集的url在哪個(gè)位置
得出正則:(.*?)
正則表達(dá)式學(xué)習(xí):(百度搜:python 正則表達(dá)式)
def reurl(): urlr = r'<cite>(.*?)</cite>' reurl = re.findall(urlr,html) print reurl
就在我請(qǐng)求第二頁(yè)的時(shí)候發(fā)現(xiàn)了問(wèn)題
可以看到請(qǐng)求內(nèi)容和第一頁(yè)一樣,有某種驗(yàn)證機(jī)制
一般情況下驗(yàn)證機(jī)制,表示特定參數(shù)
經(jīng)過(guò)多次測(cè)試,發(fā)現(xiàn)缺少 Cookie: _EDGE_V=1;
請(qǐng)求正常,大致已經(jīng)完成
接下來(lái)只需要給關(guān)鍵詞和頁(yè)數(shù)變量就ok了
00x4:搜索
再搜索site:baidu.com 又出現(xiàn)了問(wèn)題
于是修改正則為:
'target="_blank" href="(http.*?\..*?\..*?)" h="'
有很多我們不想要的結(jié)果,我們?cè)賮?lái)遍歷下采集的urls
做一下處理
正則為:
(http[s]?://.*?)/
代碼為:
def url(): for url in urls: urlr = r'(http[s]?://.*?)/' url = re.findall(urlr,url) print url
print url 改為 print url[0] 再進(jìn)行處理一下
可以看到下面還有重復(fù)的url,對(duì)url去重一下
def qc():#去重復(fù) for url in url_ok: if url in url_bing: continue url_bing.append(url)
00x5:自動(dòng)保存
接下來(lái)我們要讓他自動(dòng)保存到url_bing.txt
with open('url_bing.txt','a+')as f: for url in url_bing: print url f.write(url+"\n") print "Save as url_bing.txt"
00x6:完整代碼
#!/usr/bin/python #-*- coding:utf-8 -*- import requests import re urls = [] url_ok = [] url_bing=[] def req(q,first): global html url = 'https://cn.bing.com/search?q=%s&first=%s'%(q,first) print url headers = { 'Host':'cn.bing.com', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0', 'Cookie': '_EDGE_V=1;' } req = requests.get(url,headers=headers) html = req.content def reurl():#正則匹配url urlr = r'target="_blank" href="(http.*?\..*?\..*?)" h="' reurl = re.findall(urlr,html) for url in reurl: if url not in urls: urls.append(url) def url():#url二次處理 for url in urls: urlr = r'(http[s]?://.*?)/' url = re.findall(urlr,url) url_ok.append(url[0]) def qc():#去重復(fù) for url in url_ok: if url in url_bing: continue url_bing.append(url) if __name__ == '__main__': q = raw_input('\nkey:') page = input('page:') for first in range(0, page): req(q, first * 10) reurl() url() qc() with open('url_bing.txt','a+')as f: for url in url_bing: print url f.write(url+"\n") print "Save as url_bing.txt"
以上就是PyHacker編寫URL批量采集器的詳細(xì)內(nèi)容,更多關(guān)于PyHacker批量采集URL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Pycharm出現(xiàn)out of memory的終極解決方法
這篇文章主要介紹了詳解Pycharm出現(xiàn)out of memory的終極解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03使用Python設(shè)置tmpfs來(lái)加速項(xiàng)目的教程
這篇文章主要介紹了使用Python設(shè)置tmpfs來(lái)加速項(xiàng)目的教程,文中給出方法使用Python腳本將tmpfs保存于內(nèi)存中的程序存儲(chǔ)到本地硬盤上,需要的朋友可以參考下2015-04-04Python中Collections模塊的Counter容器類使用教程
Counter是Python標(biāo)準(zhǔn)庫(kù)提供的一個(gè)非常有用的容器,可以用來(lái)對(duì)序列中出現(xiàn)的各個(gè)元素進(jìn)行計(jì)數(shù),下面就來(lái)一起看一下Python中Collections模塊的Counter容器類使用教程2016-05-05Python如何實(shí)用File文件的實(shí)現(xiàn)
本文主要介紹了Python如何實(shí)用File文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python腳本開(kāi)機(jī)自啟的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python腳本開(kāi)機(jī)自啟的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python編程使用*解包和itertools.product()求笛卡爾積的方法
這篇文章主要介紹了Python編程使用*解包和itertools.product()求笛卡爾積的方法,涉及Python列表轉(zhuǎn)換及itertools.product()求笛卡爾積相關(guān)操作技巧,需要的朋友可以參考下2017-12-12python 兩個(gè)數(shù)據(jù)庫(kù)postgresql對(duì)比
這篇文章主要介紹了python 兩個(gè)數(shù)據(jù)庫(kù)postgresql對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10