首頁 > 軟體

PyHacker編寫URL批次採集器

2022-05-14 19:02:59

喜歡用Python寫指令碼的小夥伴可以跟著一起寫一寫呀。

編寫環境:Python2.x

00x1:需要用到的模組

需要用到的模組如下:

import requests
import re

本文將用re正則進行講解,如果你用Xpath也可以

00x2:選取搜尋引擎

首先我們要選取搜尋引擎(其他搜尋引擎原理相同)

以bing為例:Cn.bing.com

首先分析bing翻頁機制:

https://cn.bing.com/search?q=內容&first=0 第一頁
https://cn.bing.com/search?q=內容&first=10 第二頁
https://cn.bing.com/search?q=內容&first=20 第三頁

頁數 = 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在哪個位置

得出正則:(.*?)

正規表示式學習:(百度搜:python 正規表示式)

def reurl():
    urlr = r'<cite>(.*?)</cite>'
    reurl = re.findall(urlr,html)
    print reurl

就在我請求第二頁的時候發現了問題

可以看到請求內容和第一頁一樣,有某種驗證機制

一般情況下驗證機制,表示特定引數

經過多次測試,發現缺少 Cookie: _EDGE_V=1;

請求正常,大致已經完成

接下來只需要給關鍵詞和頁數變數就ok了

00x4:搜尋

再搜尋site:baidu.com 又出現了問題

於是修改正則為:

'target="_blank" href="(http.*?..*?..*?)" h="'

有很多我們不想要的結果,我們再來遍歷下采集的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] 再進行處理一下

可以看到下面還有重複的url,對url去重一下

def qc():#去重複
    for url in url_ok:
        if url in url_bing:
            continue
        url_bing.append(url)

00x5:自動儲存

接下來我們要讓他自動儲存到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():#去重複
    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批次採集器的詳細內容,更多關於PyHacker批次採集URL的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com