国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

爬蟲初級操作(二)

callmewhy / 2053人閱讀

摘要:本篇內容為網絡爬蟲初級操作的簡單介紹,內容主要有以下部分解析網頁數據庫解析網頁一般來說,解析網頁有三種方式正則表達式。關于,我們最后再來看一個實戰項目爬取北京二手房價格。代碼如下第頁這樣就成功爬取了安居客上前頁的北京二手房價格。

本篇內容為 python 網絡爬蟲初級操作的簡單介紹,內容主要有以下 2 部分:

解析網頁

數據庫


解析網頁

一般來說,解析網頁有三種方式:正則表達式、BeautifulSoup、lxml。其中正則表達式較難,BeautifulSoup 適合初學者,可以快速掌握提取網頁中數據的方法。

正則表達式

常見的正則字符和含義如下:

.    匹配任意字符,除了換行符
*     匹配前一個字符 0 次或多次
+    匹配前一個字符 1 次或多次
?    匹配前一個字符 0 次或 1 次

^    匹配字符串開頭
$    匹配字符串末尾

()    匹配括號內表示式,也表示一個組

s    匹配空白字符
S    匹配任何非空白字符

d    匹配數字,等價于[0-9]
D    匹配任何非數字,等價于[^0-9]

w    匹配字母數字,等價于[A-Za-z0-9]
W    匹配非字母數字,等價于[^A-Za-z0-9]

[]    用來表示一組字符

Python 正則表達式有以下 3 種方法:
re.match 方法:從字符串起始位置匹配一個模式,如果從起始位置匹配了,match()就返回none。
語法 re.match(pattern, string, flags=0)
pattern:正則表達式
string:要匹配的字符串
flags:控制正則表達式的匹配方式,如 是否區分大小寫、多行匹配等

re.search方法:只能從字符串的起始位置進行匹配。

find_all方法:可以找到所有的匹配。

BeautifulSoup

BeautifulSoupHTMLXML 文件中提取數據。首先需要使用命令行來進行安裝:

pip install bs4

在使用的時候需要導入:

from bs4 import BeautifulSoup

例如使用 BeautifulSoup 獲取博客主頁文章的標題,代碼和注釋如下:

import requests
from bs4 import BeautifulSoup

link = "http://www.santostang.com/"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
r = requests.get(link, headers=headers)
# 將網頁響應體的字符串轉換為soup對象
soup = BeautifulSoup(r.text, "html.parser")
first_title = soup.find("h1", class_="post-title").a.text.strip()
print("第一篇文章的標題是:", first_title)

title_list = soup.find_all("h1", class_="post-title")

for i in range(len(title_list)):
    title = title_list[i].a.text.strip()

    print("第 %s 篇文章的標題是: %s" % (i+1, title))


運行得到結果:

成功抓取到所需內容。

關于 BeautifulSoup, 我們最后再來看一個實戰項目:爬取北京二手房價格。代碼如下:

import requests
from bs4 import BeautifulSoup
import time

headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}

for i in range(1,11):
    link = "https://beijing.anjuke.com/sale/"
    r = requests.get(link, headers=headers)
    print("第", i, "頁")

    soup = BeautifulSoup(r.text, "lxml")
    house_list = soup.find_all("li", class_="list-item")

    for house in house_list:
        name = house.find("div", class_="house-title").a.text.strip()
        price = house.find("span", class_="price-det").text.strip()
        price_area = house.find("span", class_="unit-price").text.strip()

        no_room = house.find("div", class_="details-item").span.text
        area = house.find("div", class_="details-item").contents[3].text
        floor = house.find("div", class_="details-item").contents[5].text
        year = house.find("div", class_="details-item").contents[7].text
        broker = house.find("span", class_="brokername").text
        broker = broker[1:]
        address = house.find("span", class_="comm-address").text.strip()
        address = address.replace("xa0xa0
                 ", "    ")
        tag_list = house.find_all("span", class_="item-tags")
        tags = [i.text for i in tag_list]
        print(name, price, price_area, no_room, area, floor, year, broker, address, tags)
    time.sleep(5)

這樣就成功爬取了安居客上前 10 頁的北京二手房價格。

數據庫

數據存儲分為兩種,存儲在文件(TXT和CSV)中和存儲在數據庫(MySQL關系數據庫和MongoDB數據庫)中。

CSV (Comma-Separated Values)是逗號分隔值的文件格式,其文件以純文本的形式存儲表格數據(數字和文本)。
CSV 文件的每一行都用換行符分隔,列與列之間用逗號分隔。

MySQL是一種關系數據庫管理系統,所使用的是SQL語言,是訪問數據庫最常用的標準化語言。關系數據庫(建立在關系模型基礎上的數據庫)將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了寫入和提取的速度,數據的存儲也比較靈活。

關于存儲在文件的方法這里不再贅述,下面首先介紹如何存儲至MySQL數據庫。

你需要先到官網下載并安裝 MySQL數據庫,博主用的是 macOS Sierra 系統,在安裝完成后,打開系統偏好設置,如下圖:

最下方出現 MySQL的圖標,打開并連接,如下圖所示:

打開終端,在終端中輸入添加MySQL路徑的命令:

PATH="$PATH":/usr/local/mysql/bin

繼續輸入登錄到MySQL的命令:mysql -u root -p,然后輸入密碼即可成功登錄。成功登錄界面如下:

接下來介紹MySQL的基本操作:

創建數據庫

創建數據表

創建數據表必須指明每一列數據的名稱(column_name)和類別(column_type)。

在上圖中,創建了 4 個變量:id, url, content, created_time。其中id的類別是整數INT,屬性為自己增加(AUTO_INCREMENT)。新添加數據的數值會自動加 1。PRIMARY KEY的關鍵字用于將id定義為主鍵。

urlcontent的類別是可變長度的字符串VARCHAR,括號中的數字代表長度的最大值,NOT NULL表示urlcontent不能為空。created_time為該數據添加時間,不需要設置,因為有時間戳,它會自動根據當時的時間填入。

創建數據表后,可查看數據表的結構:

在數據表中插入數據

這里插入了urlcontent兩個屬性,id是自動遞增的,created_time是數據加入的時間戳,這兩個變量會自動填入。

從數據表中提取數據

由上圖,我們可以看到提取數據有 3 種方法:
(1)將id等于 1 的數據行提取出來;
(2)提取只看部分字段的數據;
(3)提取包含部分內容的數據。

刪除數據

??注意,如果沒有指定 WHERE 子句,用DELETE FROM urls將會導致MySQL表中的所有記錄被刪除,即誤刪除整張表。

修改數據

由于idcreated_time是數據庫自動填入的,因此這一行數據的id為 2。

更多操作可參考菜鳥教程。

下面介紹使用Python操作MySQL數據庫,依次使用下令命令安裝mysqlclient

brew install mysql
export PATH=$PATH:/usr/local/mysql/bin
pip install MySQL-Python
pip3 install mysqlclient

出現下列文字即安裝成功:

Python操作MySQL數據庫,我們以在博客爬取標題和 url 地址為例,具體代碼和解釋如下:

#coding=UTF-8
import MySQLdb
import requests
from bs4 import BeautifulSoup

# connect() 方法用于創建數據庫的連接,里面可以指定參數:用戶名,密碼,主機等信息
#這只是連接到了數據庫,要想操作數據庫需要創建游標
conn = MySQLdb.connect(host="localhost", user="root", passwd="your_password", db="MyScraping", charset="utf8")
# 通過獲取到的數據庫連接conn下的cursor()方法來創建游標。
cur=conn.cursor()

link = "http://www.santostang.com/"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
r = requests.get(link, headers=headers)

soup = BeautifulSoup(r.text, "html.parser")
title_list = soup.find_all("h1", class_="post-title")
for eachone in title_list:
    url = eachone.a["href"]
    title = eachone.a.text.strip()
    # 創建數據表,通過游標cur 操作execute()方法可以寫入純sql語句。通過execute()方法中寫如sql語句來對數據進行操作
    cur.execute("INSERT INTO urls (url, content) VALUES (%s, %s)", (url, title))

cur.close()
conn.commit()
conn.close()

最后,我們來介紹如何存儲至MongoDB數據庫。

首先要知道NoSQL泛指非關系型數據庫,數據之間無關系,具有非常高的讀寫性能,而MongoDB是其中非常流行的一種數據庫。它是一種關系數據庫管理系統,所使用的是SQL語言,是訪問數據庫最常用的標準化語言。

下面仍以上述的在博客爬取標題和 url 地址為例。

第一步連接 MongoDB客戶端,然后連接數據庫blog_database,再選擇該數據的集合blog。如果它們不存在,就會自動創建一個,代碼示例如下:

from pymongo import MongoClient

client = MongoClient("localhost", 27017)
db = client.blog_database
collection = db.blog

第二步爬取博客主頁的所有文章標題存儲至MongoDB數據庫,代碼如下:

import requests
import datetime
from bs4 import BeautifulSoup
from pymongo import MongoClient

client = MongoClient("localhost", 27017)
db = client.blog_database
collection = db.blog

link = "http://www.santostang.com/"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
r = requests.get(link, headers=headers)

soup = BeautifulSoup(r.text, "html.parser")
title_list = soup.find_all("h1", class_="post-title")
for eachone in title_list:
    url = eachone.a["href"]
    title = eachone.a.text.strip()
    post = {"url": url,
            "title": title,
            "date": datetime.datetime.utcnow()

    }
    collection.insert_one(post)

重點在最后一部分的代碼,首先將爬蟲獲取的數據存入post的字典中,然后使用insert_one加入集合collection中。

最后,啟動MongoDB查看結果。

打開終端輸入:

sudo mongod --config /usr/local/etc/mongod.conf

確認權限后,保持當前終端不關,新建終端依次輸入:

mongod

mongo

出現以下文字表示連接成功:

然后,輸入:

use blog_database

db.blog.find().pretty()

就查詢到數據集合的數據了,如下圖所示:

同時注意到,它是JSON格式的。

更多使用 Python 來操作 MongoDB 數據庫的知識,可以參考 PyMongo官網。


本文為崔慶才博客和唐松的《Python網絡爬蟲從入門到實踐》學習記錄與總結,具體內容可參考二者。博主在學習過程中的練習代碼也已上傳至 GitHub。

不足之處,歡迎指正。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19312.html

相關文章

  • 爬蟲初級操作

    摘要:本篇內容為網絡爬蟲初級操作的簡單介紹,內容主要有以下部分解析網頁數據庫解析網頁一般來說,解析網頁有三種方式正則表達式。關于,我們最后再來看一個實戰項目爬取北京二手房價格。代碼如下第頁這樣就成功爬取了安居客上前頁的北京二手房價格。 本篇內容為 python 網絡爬蟲初級操作的簡單介紹,內容主要有以下 2 部分: 解析網頁 數據庫 解析網頁 一般來說,解析網頁有三種方式:正則表達式、...

    崔曉明 評論0 收藏0
  • 前端培訓-中級階段(10)- 同源策略(2019-08-15期)

    摘要:同源策略是什么同源策略是瀏覽器的一個安全功能,不同源的數據禁止訪問。或許你可以說驗證,在瀏覽器沒有同源策略的情況下這些都可以繞過去。總結同源策略是蠻好的,防御了大部分的攻擊。 前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,現在前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本著提升技術水平,打牢基礎知識的中心思...

    heartFollower 評論0 收藏0
  • python爬蟲爬取github所有follwers初級

    摘要:按照同樣的方式扒取所有的自己的用戶。但是為了尊重人家隱私權,好吧,就這樣吧,我也不能做啥。 這幾天我很焦慮,受不了那些先follow我,等我follow回去后又unfollow的人,因為是他們先follow我的,我出于人道主義想著互粉一下的,結果這么對我,太不厚道了。github又不像微博那樣有互粉標志,這真的整得我很心煩,于是想著寫一個爬蟲,把這些壞人揪出來~第一步,當然是放出代碼啦...

    stormgens 評論0 收藏0
  • 部署Scrapy分布式爬蟲項目

    摘要:以上示例代表當發現條或條以上的級別的時,自動停止當前任務,如果當前時間在郵件工作時間內,則同時發送通知郵件。 showImg(https://segmentfault.com/img/remote/1460000018052810); 一、需求分析 初級用戶: 只有一臺開發主機 能夠通過 Scrapyd-client 打包和部署 Scrapy 爬蟲項目,以及通過 Scrapyd JS...

    techstay 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<