本文目錄一覽:
- 1、如何用Python爬取搜索引擎的結果
- 2、aws上cpu利用率怎麼用python採集
- 3、如何運行Python腳本這是我上傳在AWS SSH會話的應用程序的一部分
- 4、python 爬蟲 ip池怎麼做
如何用Python爬取搜索引擎的結果
我選取的是爬取百度知道的html 作為我的搜索源數據,目前先打算做網頁標題的搜索,選用了 Python 的 scrapy 庫來對網頁進行爬取,爬取網頁的標題,url,以及html,用sqlist3來對爬取的數據源進行管理。
爬取的過程是一個深度優先的過程,設定四個起始 url ,然後維護一個數據庫,數據庫中有兩個表,一個 infoLib,其中存儲了爬取的主要信息:標題,url ,html;另一個表為urlLib,存儲已經爬取的url,是一個輔助表,在我們爬取每個網頁前,需要先判斷該網頁是否已爬過(是否存在urlLib中)。在數據存儲的過程中,使用了SQL的少量語法,由於我之前學過 MySQL ,這塊處理起來比較駕輕就熟。
深度優先的網頁爬取方案是:給定初始 url,爬取這個網頁中所有 url,繼續對網頁中的 url 遞歸爬取。代碼逐段解析在下面,方便自己以後回顧。
1.建一個 scrapy 工程:
關於建工程,可以參看這個scrapy入門教程,通過運行:
[python] view plain copy
scrapy startproject ***
在當前目錄下建一個scrapy 的項目,然後在 spiders 的子目錄下建立一個 .py文件,該文件即是爬蟲的主要文件,注意:其中該文件的名字不能與該工程的名字相同,否則,之後調用跑這個爬蟲的時候將會出現錯誤,見ImportError。
2.具體寫.py文件:
[python] view plain copy
import scrapy
from scrapy import Request
import sqlite3
class rsSpider(scrapy.spiders.Spider): #該類繼承自 scrapy 中的 spider
name = “zhidao” #將該爬蟲命名為 「知道」,在執行爬蟲時對應指令將為: scrapy crawl zhidao
#download_delay = 1 #只是用於控制爬蟲速度的,1s/次,可以用來對付反爬蟲
allowed_domains = [“zhidao.baidu.com”] #允許爬取的作用域
url_first = ” #用於之後解析域名用的短字符串
start_urls = [“”, #python
“”, #database
“”, #C++
“”, #operator system
“” #Unix programing
] #定義初始的 url ,有五類知道起始網頁
#add database
connDataBase = sqlite3.connect(“zhidao.db”) #連接到數據庫「zhidao.db」
cDataBase = connDataBase.cursor() #設置定位指針
cDataBase.execute(””’CREATE TABLE IF NOT EXISTS infoLib
(id INTEGER PRIMARY KEY AUTOINCREMENT,name text,url text,html text)”’)
#通過定位指針操作數據庫,若zhidao.db中 infoLib表不存在,則建立該表,其中主鍵是自增的 id(用於引擎的docId),下一列是文章的標題,然後是url,最後是html
#url dataBase
cDataBase.execute(””’CREATE TABLE IF NOT EXISTS urlLib
(url text PRIMARY KEY)”’)
#通過定位指針操作數據庫,若zhidao.db中urlLib表不存在,則建立該表,其中只存了 url,保存已經爬過的url,之所以再建一個表,是猜測表的主鍵應該使用哈希表存儲的,查詢速度較快,此處其實也可以用一個外鍵將兩個表關聯起來
2. .py文件中的parse函數:
.py文件中的parse函數將具體處理url返回的 response,進行解析,具體代碼中說明:
[python] view plain copy
def parse(self,response):
pageName = response.xpath(‘//title/text()’).extract()[0] #解析爬取網頁中的名稱
pageUrl = response.xpath(“//head/link”).re(‘href=”(.*?)”‘)[0] #解析爬取網頁的 url,並不是直接使用函數獲取,那樣會夾雜亂碼
pageHtml = response.xpath(“//html”).extract()[0] #獲取網頁html
# judge whether pageUrl in cUrl
if pageUrl in self.start_urls:
#若當前url 是 start_url 中以一員。進行該判斷的原因是,我們對重複的 start_url 中的網址將仍然進行爬取,而對非 start_url 中的曾經爬過的網頁將不再爬取
self.cDataBase.execute(‘SELECT * FROM urlLib WHERE url = (?)’,(pageUrl,))
lines = self.cDataBase.fetchall()
if len(lines): #若當前Url已經爬過
pass #則不再在數據庫中添加信息,只是由其為跟繼續往下爬
else: #否則,將信息爬入數據庫
self.cDataBase.execute(‘INSERT INTO urlLib (url) VALUES (?)’,(pageUrl,))
self.cDataBase.execute(“INSERT INTO infoLib (name,url,html) VALUES (?,?,?)”,(pageName,pageUrl,pageHtml))
else: #此時進入的非 url 網頁一定是沒有爬取過的(因為深入start_url之後的網頁都會先進行判斷,在爬取,在下面的for循環中判斷)
self.cDataBase.execute(‘INSERT INTO urlLib (url) VALUES (?)’,(pageUrl,))
self.cDataBase.execute(“INSERT INTO infoLib (name,url,html) VALUES (?,?,?)”,(pageName,pageUrl,pageHtml))
self.connDataBase.commit() #保存數據庫的更新
print “———————————————–” #輸出提示信息,沒啥用
for sel in response.xpath(‘//ul/li/a’).re(‘href=”(/question/.*?.html)’): #抓出所有該網頁的延伸網頁,進行判斷並對未爬過的網頁進行爬取
sel = “” + sel #解析出延伸網頁的url
self.cDataBase.execute(‘SELECT * FROM urlLib WHERE url = (?)’,(sel,)) #判斷該網頁是否已在數據庫中
lines = self.cDataBase.fetchall()
if len(lines) == 0: #若不在,則對其繼續進行爬取
yield Request(url = sel, callback=self.parse)
aws上cpu利用率怎麼用python採集
#!/usr/bin/python
# -*- coding:utf8 -*-
__author__ = ‘chenwx’
def cpu_rate():
import time
def cpu_r():
f = open(「/proc/stat」,「r」)
for f_line in f:
break
f.close()
f_line = f_line.split(「 」)
f_line_a=[]
for i in f_line:
if i.isdigit():
i=int(i)
f_line_a.append(i)
total = sum(f_line_a)
idle = f_line_a[3]
return total,idle
total_a,idle_a=cpu_r()
time.sleep(2)
total_b,idle_b=cpu_r()
sys_idle = idle_b – idle_a
sys_total = total_b – total_a
sys_us = sys_total – sys_idle
cpu_a = (float(sys_us)/sys_total)*100
return cpu_a
# print cpu_rate()
如何運行Python腳本這是我上傳在AWS SSH會話的應用程序的一部分
secureCRT支持運行.js和.vbs以及.py格式的腳本,無奈mac上識別前兩個格式的腳本只能寫一寫Python腳本,
舉個簡單的例子,利用腳本直接ssh連接一台機器,
在View菜單中勾選Button Bar讓這個菜單在下方顯示出來,
在下方的Default右方右鍵出現一個菜單點擊New Button按鈕,在顯示框的Function一欄選擇Run Script中間選擇編寫好的.py文件 !
python 爬蟲 ip池怎麼做
Python爬蟲採集信息都是採用IP進行更改,不然就不能快速的爬取信息,可以加入採用這類方式,就失去了快速抓取的意義。
所以,如果要大批量的抓取信息,就不能避免的使用IP池,針對Python爬蟲使用的IP池,是如何搭建起來的呢?接下來和大家說明一下如何建爬蟲IP池的問題。
第一步:找IP資源
IP資源並不豐富,換句話說是供不應求的,因此一般是使用動態IP。
免費方法,直接在網絡上找,在搜索引擎中一搜索特別多能夠提供IP資源的網站,進行採集即可。
付費方法,通過購買芝麻代理上的IP資源,並進行提取,搭建IP池。
第二步,檢測可用IP保存
提取到的IP,可以進一步進行檢測是否可用,比如訪問某個固定的網站,找出訪問成功的IP進行保存。
第三步,隨機調用IP
在爬蟲需要使用IP時,可用讀取保存IP的文件,進行隨機調用IP。
本文介紹了如何建爬蟲的IP池方法,可以說搭建IP池很容易,可有些IP的時效性很短,使用之前還可以再測試一次的。如果考慮免費IP,那麼對於IP的效果性要做好心理準備的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/183902.html