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
分析完畢,我們來請(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,沒毛病
00x3:分析需要采集的url
分析需要采集的url在哪個(gè)位置

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

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


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

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

有很多我們不想要的結(jié)果,我們?cè)賮肀闅v下采集的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)保存
接下來我們要讓他自動(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的終極解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
使用Python設(shè)置tmpfs來加速項(xiàng)目的教程
這篇文章主要介紹了使用Python設(shè)置tmpfs來加速項(xiàng)目的教程,文中給出方法使用Python腳本將tmpfs保存于內(nèi)存中的程序存儲(chǔ)到本地硬盤上,需要的朋友可以參考下2015-04-04
Python中Collections模塊的Counter容器類使用教程
Counter是Python標(biāo)準(zhǔn)庫提供的一個(gè)非常有用的容器,可以用來對(duì)序列中出現(xiàn)的各個(gè)元素進(jìn)行計(jì)數(shù),下面就來一起看一下Python中Collections模塊的Counter容器類使用教程2016-05-05
Python如何實(shí)用File文件的實(shí)現(xiàn)
本文主要介紹了Python如何實(shí)用File文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
python腳本開機(jī)自啟的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python腳本開機(jī)自啟的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python編程使用*解包和itertools.product()求笛卡爾積的方法
這篇文章主要介紹了Python編程使用*解包和itertools.product()求笛卡爾積的方法,涉及Python列表轉(zhuǎn)換及itertools.product()求笛卡爾積相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
python 兩個(gè)數(shù)據(jù)庫postgresql對(duì)比
這篇文章主要介紹了python 兩個(gè)數(shù)據(jù)庫postgresql對(duì)比,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10

