Python3 爬取頁面元素的幾種方法

2021-10-07 14:29:15 字數 4534 閱讀 5772

方法一:xpath

from lxml import etree

import requests

from requests import exceptions

def get_response(url, headers=none, timeout=none):

""""

當條件為假,斷言失敗

assert response.status_code == 200'請求報錯,請求狀態碼為: %s'%str(response.status_code)

content = etree_html.xpath(xpath) # list 型別

for each in content:

# 把結果中的換行和空格去掉

re_each = each.replace('\n', '').replace(' ', '')

if re_each == '\n' or re_each == '':

continue

else:

# print(re_each)

return result

# 然後

def get_spider_content_xpath(self):

# func01. 獲取原始碼, 通過 xpath 爬取資料

html = get_response(self.url, param.headers, 10)

etree_html = etree.html(html.text)

result = get_content(etree_html, param.xpath) # 這裡param.xpath是封裝的xpath引數

return result

result 就是通過 xpath 方式得到的資料內容;

其中,xpath 我寫了個簡單例子:

xpath = "//div[@class='article-item-box csdn-tracking-statistics']/h4/a/text()"
方法二:正則匹配

from lxml import etree

import requests

from requests import exceptions

def get_response(url, headers=none, timeout=none):

""""

當條件為假,斷言失敗

assert response.status_code == 200'請求報錯,請求狀態碼為: %s'%str(response.status_code)

# 然後

def get_spider_content_re(self):

# func02. 獲取原始碼,直接通過原始碼正則匹配爬取資料

# 需要配置引數:url 和 headers 中的user-agent ,均在 param 中配置

html = get_response(self.url, param.headers, 10)

html_text = html.text

# 正則匹配頁面所有url

# list 去重 -- list({}.fromkeys(list).keys())

urls = list({}.fromkeys(urls).keys())

return urls

urls 就是要匹配的內容

其中,匹配 url 的正規表示式還算可用,試了很多版本,個人認為這個表示式還算靠譜:

'http[s]?://(?:[a-za-z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fa-f][0-9a-fa-f]))+'
法三:標籤 beautifulsoup find find_all

import requests

from urllib.parse import urlparse

from urllib import request, parse

from bs4 import beautifulsoup

word = '周杰倫'

url = '' + urllib.parse.quote(word) + '&pn=0'

page = request.urlopen(url).read()

soup = beautifulsoup(page, 'lxml')

tagh3 = soup.find_all('a') # 返回 list

hrefs =

for h3 in tagh3:

# href = h3.find('a').get('href')

try:

href = h3.get('href')

except:

pass

else:

hrefs 就是通過標籤獲取到的內容,這裡我獲取的是頁面所有 url

方法四:標籤 beautifulsoup select

import urllib

import requests

from urllib.parse import urlparse

from urllib import request

from bs4 import beautifulsoup

word = '周杰倫'

url = '' + urllib.parse.quote(word) + '&pn=0'

page = request.urlopen(url).read()

soup = beautifulsoup(page, 'lxml')

# tagh3 = soup.select('h3 > a[href]')

tags = soup.select('a[href]') # 返回 list,同級不需要空格分隔

hrefs =

for tag in tags:

hrefs = list({}.fromkeys(hrefs).keys()) # 去重

hrefs 就是通過標籤 select 方法獲取到的內容,這裡我獲取的是頁面上所有 url;

python3爬取電影資料

爬取電影票房資料,用於統計建模分析。目標 為電影票房資料庫 基本的爬取靜態 的技術,模擬登陸使用的是最簡單的cookies。這種模擬登陸的方式雖然簡單但有很大的侷限性,時效性比較短,也許兩三天後就失效了,或者網頁改版一點也會導致失效。最好的方式還是找到登陸頁面,獲取需要提交的資料和提交方式,模擬我們...

python3 小說爬取案例

爬取 具體書籍 res requests.get url,headers header 爬取網頁 web res.text 獲得網頁文字格式 正則匹配方法 匹配除了空格和換行之外的字元 s s 上面的匹配方法無效的時候用這個匹配全部的字元,再用上面的方法進行匹配。具體應用舉例 pattern4 re...

python3爬取高畫質桌布 2

上次只是爬取乙個 的,這次要爬取一整個頁面的所有 的。在上次的 的基礎上進行修改就行了,從 的索引頁面開始,爬取該頁面上所有的 的鏈結,再套用上次的 就行了。若要爬取多個頁面只需在外圍套上乙個迴圈就可以了。如下 import requests import refrom bs4 import bea...