日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫笔记(二)

發(fā)布時間:2025/3/19 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫笔记(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

爬蟲筆記(二)

  • python 爬蟲的流程
    • 三個流程:
    • 三個流程的技術(shù)實現(xiàn):
      • 1.獲取網(wǎng)頁
      • 2.解析網(wǎng)頁
      • 3.存儲數(shù)據(jù)
  • 傳遞URL參數(shù)
  • 獲取響應(yīng)內(nèi)容
  • 解析網(wǎng)頁
    • 正則表達(dá)式
      • re.match
      • re.search
      • re.findall
      • re.compile
  • 使用 BeautifulSoup 解析網(wǎng)頁
    • 解析器
  • 使用lxml解析網(wǎng)頁
    • HTML中什么是元素,什么是標(biāo)簽,什么是屬性
    • 使用方法

python 爬蟲的流程

三個流程:

三個流程的技術(shù)實現(xiàn):

1.獲取網(wǎng)頁

獲取網(wǎng)頁基礎(chǔ)技術(shù):

  • requests
  • urllib
  • selenium(模擬瀏覽器)
    進(jìn)階技術(shù):
  • 多進(jìn)程多線程抓取
  • 登錄抓取
  • 突破IP封禁
  • 服務(wù)器抓取

2.解析網(wǎng)頁

基礎(chǔ):

  • re 正則表達(dá)式

  • BeautifulSoup

  • lxml
    進(jìn)階:

  • 解決中文亂碼

3.存儲數(shù)據(jù)

基礎(chǔ):

  • txt 文件

  • csv 文件
    進(jìn)階:

  • MySQL數(shù)據(jù)庫

  • MongoDB數(shù)據(jù)庫

傳遞URL參數(shù)

簡單來說就是網(wǎng)址,一般有關(guān)聯(lián)的網(wǎng)頁的網(wǎng)址只有后邊的數(shù)值有所不同罷了。
方法一:
如果后邊有問號,并且以鍵/值對的形式放在URL中,
可以把參數(shù)存在字典中,用params構(gòu)建至URL中

import requests key_dict ={'key1':'value1','key_2':'value2'] r = requests.get('http:dsjhsdhj.org/get',params = key_dict) print(r.url) #得到 http:dsjhsdhj.org/get?key1=value1&key2=value2

方法二:
如果只是簡單的后面的數(shù)值改變就可以用循環(huán)加上去。(這個值可以通過對比找出規(guī)律。

for i in range(1,10):link = 'http://cdskc.com/sale/p'+str(i)

獲取響應(yīng)內(nèi)容

r = requests.get('網(wǎng)址')

通過該方法返回一個名為r的response響應(yīng)對象,其存儲了服務(wù)器響應(yīng)的內(nèi)容。

  • r.text :是服務(wù)器響應(yīng)的內(nèi)容,會自動根據(jù)響應(yīng)頭部的字符編碼進(jìn)行解碼。
  • r.encoding:是服務(wù)器內(nèi)容使用的文本編碼。
  • r.status_code:用于檢測響應(yīng)的狀態(tài)碼,如果返回200,就表示請求成功
    了;如果返回的是4xx,就表示客戶端錯誤;返回5xx則表示服務(wù)器錯誤響應(yīng)。我們可以用: r.status.code 來檢測請求是否正確響應(yīng)。
  • r.content:是字節(jié)方式的響應(yīng)體,會自動解碼gaip和deflate編碼的響應(yīng)
    數(shù)據(jù)。
  • r.json():是Requests中內(nèi)置的JSON解碼器。

解析網(wǎng)頁

正則表達(dá)式

需要導(dǎo)入庫

import re

python 正則表達(dá)式大致有三種方法,分別是match、search、findall

re.match

語法:re.match(pattern,string,flags=0)
其中pattern是正則表達(dá)式,包含一些特殊的字符,string為要匹配的字符串,flags用來控制正則表達(dá)式的匹配方法,如是否區(qū)分大小寫·,多行匹配等(是可選的參數(shù),也叫作修飾符)
常見的修飾符

re.I:使得匹配不區(qū)分大小寫 re.L:做本地化識別匹配 re.M:多行匹配,對匹配開頭^和結(jié)尾$有影響 re.S:使得.匹配包括換行符在內(nèi)的所有字符 re.U:根據(jù)Unicode字符集解析字符 re.X:賦予更靈活的格式有助于正則表達(dá)式的理解

match()方法有四個方法:

-group() :輸出匹配到的結(jié)果

  • span() :輸出匹配的范圍
  • start() 返回匹配開始的位置
  • end() 返回匹配結(jié)束的位置

例子:

import reline = 'Fat cats are smarter than dogs,is it right?'m = re.match(r'(.*) are (.*?) dogs',line)print(m.group()) print(m.group(0)) print(m.group(1)) print(m.group(2)) print(m.groups())

group和groups是兩個不同的函數(shù)。
一般,m.group(N) 返回第N組括號匹配的字符。
而m.group() == m.group(0) == 所有匹配的字符,與括號無關(guān),這個是API規(guī)定的。

m.groups() 返回所有括號匹配的字符,以tuple格式。
m.groups() == (m.group(0), m.group(1), …)

那字符前邊的r是什么意思呢?

字符串中,存在一種特殊字符:轉(zhuǎn)義字符\,: \a 響鈴(BEL) \b 退格 \t 制表符 \r 回車(CR) ,將當(dāng)前位置移到本行開頭 \n 換行(LF) ,將當(dāng)前位置移到下一行開頭 \\ 代表一個反斜線 \ \' 代表一個單引號 ' \" 代表一個雙引號 " \? 代表一個問號 ? 字符串中,碰到上述字符組合,會自動轉(zhuǎn)義 在Python中字符串前加r,等價于在所有\(zhòng)前再加一個\,變成\\,\\被轉(zhuǎn)義為\,從而避免\轉(zhuǎn)義n,t,r等字符,\不再代表轉(zhuǎn)義字符(禁止轉(zhuǎn)義) 總結(jié):\為轉(zhuǎn)義字符,具備轉(zhuǎn)義能力,'\\'或r'\'則失去轉(zhuǎn)義能力 代表一個普通字符\

re.search

re.search()函數(shù)會在字符串內(nèi)查找模式匹配,只要找到第一個匹配然后返回,如果字符串沒有匹配,則返回None。

match()和search()的區(qū)別:

  • match()函數(shù)只檢測RE是不是在string的開始位置匹配,
  • search()會掃描整個string查找匹配
  • match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回none

re.findall

正則 re.findall 的簡單用法(返回string中所有與pattern相匹配的全部字串,返回形式為數(shù)組)
語法:

findall(pattern, string, flags=0)

re.compile

re.compile:
??編譯正則表達(dá)式模式,返回一個對象??梢园殉S玫恼齽t表達(dá)式編譯成正則表達(dá)式對象,方便后續(xù)調(diào)用及提高效率。

re.compile(pattern, flags=0)

如上面的例子:

import reline = 'Fat cats are smarter than dogs,is it right?' reobj = re.compile(r'(.*) are (.*?) dogs') reobj .match(line)

使用 BeautifulSoup 解析網(wǎng)頁

首先必須要導(dǎo)入 bs4 庫

from bs4 import BeautifulSoup

創(chuàng)建 beautifulsoup 對象

soup = BeautifulSoup(html)

解析器

解析器采用方法
python標(biāo)準(zhǔn)庫BeautifulSoup(makup,“html.parser”)
lxml HTML解析器BeautifulSoup(makup,“l(fā)xml”)
lxml XML 解析器BeautifulSoup(makup,“xml”)
html5libBeautifulSoup(makup,“html5lib”)

多數(shù)情況是采用第一第二種方法。

用法很靈活,詳細(xì)可以參考這篇文章
BeautifulSoup

使用lxml解析網(wǎng)頁

lxml 是一種使用 Python 編寫的庫,可以迅速、靈活地處理 XML 和 HTML。

它支持 XML Path Language (XPath) 和 Extensible Stylesheet Language Transformation (XSLT),并且實現(xiàn)了常見的 ElementTree API。

windows下安裝:

#pip方式安裝 pip3 install lxml#wheel方式安裝 #下載對應(yīng)系統(tǒng)版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml pip3 install lxml-4.2.1-cp36-cp36m-win_amd64.whl

XPath常用規(guī)則

表達(dá)式描述
nodename選取此節(jié)點的所有子節(jié)點
/從當(dāng)前節(jié)點選取直接子節(jié)點
//從當(dāng)前節(jié)點選取子孫節(jié)點
.選取當(dāng)前節(jié)點
選取當(dāng)前節(jié)點的父節(jié)點
@選取屬性
*通配符,選擇所有元素節(jié)點與元素名
@*選取所有屬性
[@attrib]選取具有給定屬性的所有元素
[@attrib=‘value’]選取給定屬性具有給定值的所有元素
[tag]選取所有具有指定元素的直接子節(jié)點
[tag=‘text’]選取所有具有指定元素并且文本內(nèi)容是text節(jié)點

HTML中什么是元素,什么是標(biāo)簽,什么是屬性

1.元素:

HTML網(wǎng)頁實際上就是由許許多多各種各樣的HTML元素構(gòu)成的文本文件,并且任何網(wǎng)頁瀏覽器都可以直接運行HTML文件。所以可以這樣說,HTML元素就是構(gòu)成HTML文件的基本對象,HTML元素可以說是一個統(tǒng)稱而已。HTML元素就是通過使用HTML標(biāo)簽進(jìn)行定義的。

2.標(biāo)簽:

標(biāo)簽就是<head>、<body>、<table>等被尖括號“<”和“>”包起來的對象,絕大部分的標(biāo)簽都是成對出現(xiàn)的,如<table></talbe>、<form></form>。當(dāng)然還有少部分不是成對出現(xiàn)的,如<br>、<hr>等。

標(biāo)簽就是用來標(biāo)記HTML元素的。位于起始標(biāo)簽和結(jié)束標(biāo)簽之間的文本就是HTML元素的內(nèi)容。

3.

屬性:

為HTML元素提供各種附加信息的就是HTML屬性,它總是以"屬性名=屬性值"這種名值對的形式出現(xiàn),而且屬性總是在HTML元素的開始標(biāo)簽中進(jìn)行定義。

一般BeautifulSoup 和lxml 是比較常用的方法
不過在使用 lxml時使用XPath方法中`XPath``可以直接在網(wǎng)頁上面復(fù)制過來。

  • 打卡一個網(wǎng)頁,右鍵點擊檢查。
  • 點擊要選擇的元素,右鍵在快捷菜單中選擇Copy->Copy XPath,就可以了,很方便。
  • 使用方法

    1.導(dǎo)入庫

    import lxml import etree

    2.創(chuàng)建對象

    html = etree.HTML(r.text)

    3.使用XPath方法

    title_list = html.xpath('') 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的爬虫笔记(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。