PyHacker編寫URL批量采集器
喜歡用Python寫腳本的小伙伴可以跟著一起寫一寫呀。
編寫環(huán)境:Python2.x
00x1:需要用到的模塊
需要用到的模塊如下:
import requests import re
本文將用re正則進(jìn)行講解,如果你用Xpath也可以
00x2:選取搜索引擎
首先我們要選取搜索引擎(其他搜索引擎原理相同)
以bing為例:Cn.bing.com
首先分析bing翻頁機(jī)制:
https://cn.bing.com/search?q=內(nèi)容&first=0 第一頁 https://cn.bing.com/search?q=內(nèi)容&first=10 第二頁 https://cn.bing.com/search?q=內(nèi)容&first=20 第三頁
頁數(shù) = First*10
分析完畢,我們來請求看一下
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,沒毛病
00x3:分析需要采集的url
分析需要采集的url在哪個(gè)位置

得出正則:(.*?)
正則表達(dá)式學(xué)習(xí):(百度搜:python 正則表達(dá)式)
def reurl():
urlr = r'<cite>(.*?)</cite>'
reurl = re.findall(urlr,html)
print reurl
就在我請求第二頁的時(shí)候發(fā)現(xiàn)了問題

可以看到請求內(nèi)容和第一頁一樣,有某種驗(yàn)證機(jī)制
一般情況下驗(yàn)證機(jī)制,表示特定參數(shù)
經(jīng)過多次測試,發(fā)現(xiàn)缺少 Cookie: _EDGE_V=1;


請求正常,大致已經(jīng)完成
接下來只需要給關(guān)鍵詞和頁數(shù)變量就ok了
00x4:搜索
再搜索site:baidu.com 又出現(xiàn)了問題

于是修改正則為:
'target="_blank" href="(http.*?\..*?\..*?)" h="'

有很多我們不想要的結(jié)果,我們再來遍歷下采集的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,對url去重一下
def qc():#去重復(fù)
for url in url_ok:
if url in url_bing:
continue
url_bing.append(url)
00x5:自動(dòng)保存
接下來我們要讓他自動(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的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
centos 安裝Python3 及對應(yīng)的pip教程詳解
這篇文章主要介紹了centos 安裝Python3 及對應(yīng)的pip的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
django中send_mail功能實(shí)現(xiàn)詳解
這篇文章主要給大家介紹了關(guān)于django中send_mail功能實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02
關(guān)于Python中空格字符串處理的技巧總結(jié)
在我們?nèi)粘9ぷ髦薪?jīng)常會(huì)遇到字符串處理,大家應(yīng)該都不陌生,但空格字符串呢?會(huì)不會(huì)就不太熟悉了呢?所以下面這篇文章就來給大家總結(jié)了關(guān)于Python中空格字符串處理的技巧,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
python中的單引號雙引號區(qū)別知識點(diǎn)總結(jié)
在本篇文章中小編給大家整理了關(guān)于python中的單引號雙引號有什么區(qū)別的相關(guān)知識點(diǎn)以及實(shí)例代碼,需要的朋友們參考下。2019-06-06
如何讓利用Python+AI使靜態(tài)圖片動(dòng)起來
這篇文章主要介紹了如何讓利用Python+AI使靜態(tài)圖片動(dòng)起來,基于的GAN生成對抗網(wǎng)絡(luò)圍繞主題實(shí)現(xiàn)靜態(tài)圖片動(dòng)起來的效果。具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Python+appium框架原生代碼實(shí)現(xiàn)App自動(dòng)化測試詳解
這篇文章主要介紹了Python+appium框架原生代碼實(shí)現(xiàn)App自動(dòng)化測試詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

