正則表達式
- 正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配宵蛀。
- re 模塊使 Python 語言擁有全部的正則表達式功能昆著。
import re
pattern = re.compile(r'\d+') # 查找數字
result1 = pattern.findall('runoob 123')
##結果為123,類型為list
- 或者
import re
result1=re.findall(r'\d+','runoob 123')
具體怎么寫正則表達式就不多說了术陶,網上教程很多凑懂,多寫多練才能更好掌握。
bs4
之前介紹了用bs4來解析 html 標簽梧宫,完成之后就可以調用bs4的各種方法來提取數據接谨。
基本用法
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.prettify() #格式化網頁代碼,缺少的補齊等等
soup.title #獲取<title>標簽
soup.title.string #獲取title的文本內容
soup.p #獲取p標簽
soup.p["class"] #獲取p標簽的class屬性
soup.find_all('a') #返回所有的a標簽塘匣,返回列表
更多詳細看官方文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
xpath
簡單來說脓豪,xpath 就是一種在 XML 文檔中查找信息的語言。
基本用法
test = html.xpath('/html/head/title') #表示匹配根節(jié)點下的head節(jié)點下的title元素節(jié)點
test = html.xpath('/html/head/title/text()')#表示匹配根節(jié)點下的head節(jié)點下的title元素節(jié)點中的文本節(jié)點
test = html.xpath('/a/@href') #表示匹配a元素節(jié)點下的子節(jié)點中的 href 屬性節(jié)點
test = html.xpath('//a[@href]') #匹配帶有 href 屬性的 <a> 標簽
test = html.xpath('//a[@href="image1.html"]') #指定帶有 href 屬性且值為 image1.html 的 <a> 標簽
xpath 方法返回字符串或者匹配列表忌卤,匹配列表中的每一項都是 lxml.etree._Element 對象扫夜。
如上面的 test 作為測試樣例,test 中的每一項都是一個 _Element 對象埠巨。我們寫爬蟲最終獲取的數據信息历谍,就是通過_Element 對象的方法來獲取的。
test = html.xpath('//a[@href="image1.html"]')
obj = test[0]
obj.tag #返回標簽名'a'
obj.attrib #返回屬性與值組成的字典{'href': 'image1.html'}
obj.get('href') #返回指定屬性的值
obj.text #返回文本值
使用XPath有一個方便的地方在于辣垒,可以直接使用Chrome瀏覽器來獲取XPath路徑望侈,方法是:在網頁中右擊->選擇審查元素(或者使用F12打開) 就可以在elements中查看網頁的html標簽了,找到你想要獲取XPath的標簽勋桶,右擊->Copy XPath 就已經將XPath路徑復制到了剪切板脱衙。
常用的樣板
正則
import requests
import re#導入相關的庫
url="https://www.ftms.com.cn/footernav/tendernotice"
data = requests.get(url)
pattern = re.compile(r'<title>(.*?)</title>') # 查找數字
title = pattern.findall(data.content)
print(title)
bs4
from bs4 import BeautifulSoup
import lxml
import requests
url='https://www.ftms.com.cn/footernav/tendernotice'
data = requests.get(url)
soup = BeautifulSoup(data.content, 'lxml')
title = soup.find_all('title')[0].string
print(title)
xpath
import requests
from lxml import etree
url = 'https://www.ftms.com.cn/footernav/tendernotice'
data = requests.get(url)
html = etree.HTML(data.content)
title = html.xpath('/html/head/title/text()')
print(title)