用xpath、bs4、re爬取B站python資料
import requests,re
from lxml import etree
from bs4 import BeautifulSoup
def get_page(page):
try:
#這裡要加上cookie
headers = {
`Cookie`: `LIVE_BUVID=AUTO5015218915110407; sid=4oag5i0u; fts=1521891539; pgv_pvi=3655305216; UM_distinctid=16257cdfffd2e4-032750a28294b2-3b60450b-100200-16257cdfffe2a0; buvid3=7B94813D-1039-4A88-A1EE-9AEFDF54BE05140244infoc; rpdid=kxsliqpkisdosikxllmww; CURRENT_QUALITY=80; finger=edc6ecda`,
`Host`: `search.bilibili.com`,
`Referer`: `https://www.bilibili.com/`,
`Upgrade-Insecure-Requests`: `1`,
`User-Agent`: `Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36`
}
url = `https://search.bilibili.com/all?keyword=python&from_source=banner_search&spm_id_from=333.334.banner_link.1&page={}`.format(str(page))
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
except Exception:
return None
#用xpath解析網頁,獲取屬性值用符號@
def xpath_parse_page(html):
data = etree.HTML(html)
items = data.xpath(`//*[@class="video-contain clearfix"]/li`)
for item in items:
yield {
`video_image` : item.xpath(`./a/div/div[1]/img/@src`)[0],
`video_title` : item.xpath(`./div/div[1]/a/text()`)[0],
`video_view` : item.xpath(`./div/div[3]/span[1]/text()`)[0].strip(),
`video_updateTime` : item.xpath(`./div/div[3]/span[3]/text()`)[0].strip(),
`video_up` : item.xpath(`./div/div[3]/span[4]/a/text()`)[0]
}
#用bs4解析網頁
def bs4_parse_page(html):
soup = BeautifulSoup(html,`lxml`)
items = soup.find_all(`li`,{`class`:`video matrix`})
for item in items:
yield{
`video_image` : item.find(`img`).get(`src`),
`video_title` : item.find(`a`,{`class`:`title`}).get_text(),
`video_view`: item.find(`span`,{`class`:`so-icon watch-num`}).get_text().strip(),
`video_updateTime` : item.find(`span`, {`class`: `so-icon time`}).get_text().strip(),
`video_up`: item.find(`span`,{`title`:`up主`}).get_text()#這裡用class的屬性得到的結果是播放量,要用title
}
#用正則解析網頁,關鍵是確定好欄位的定位,一般來說定位在欄位上面的class屬性裡
def re_parse_page(html):
pattern = re.compile(`<li.*?info.*?title="(.*?)".*?icon-playtime"></i>(.*?)</span>.*?icon-date"></i>(.*?)</span>.*?up-name">(.*?)</a>`,re.S)
items = re.findall(pattern,html)
for item in items:
yield {
`video_title`: item[0],
`video_view`: item[1].strip(),
`video_updateTime`:item[2].strip(),
`video_up`: item[3].strip()
}
def main():
#處理翻頁
for page in range(1,2):#這裡更改爬取的頁數
html = get_page(page)
for result in bs4_parse_page(html):#這裡更改使用哪一種方式解析網頁,xpath、bs4、re
print(result)
if __name__ == `__main__`:
main()
相關文章
- 使用 Python 爬取網站資料Python網站
- Python爬蟲之資料解析(XPath)Python爬蟲
- Python爬取B站影片 抓包過程分享Python
- python+requests爬取B站影片儲存到本地Python
- Python爬蟲爬取B站up主所有動態內容Python爬蟲
- Python爬蟲-xpathPython爬蟲
- Python爬蟲——XPathPython爬蟲
- 爬取B站視訊播放量及資料視覺化視覺化
- 用 appium 爬取招聘資訊 這塊的內容怎麼用 bs4 爬取?求大佬指導APP
- selenium + xpath爬取csdn關於python的博文博主資訊Python
- 爬蟲---xpath解析(爬取美女圖片)爬蟲
- Golang 爬蟲快速入門 | 獲取 B 站全站的視訊資料Golang爬蟲
- 房產資料爬取、智慧財產權資料爬取、企業工商資料爬取、抖音直播間資料python爬蟲爬取Python爬蟲
- Python:爬取疫情每日資料Python
- Python爬蟲——Xpath和lxmlPython爬蟲XML
- 快速爬取登入網站資料網站
- Python網路爬蟲四大選擇器(正規表示式、BS4、Xpath、CSS)總結Python爬蟲CSS
- 多執行緒爬取B站視訊執行緒
- Python爬取噹噹網APP資料PythonAPP
- Python 爬取 baidu 股票市值資料PythonAI
- Python爬取CSDN部落格資料Python
- Python爬蟲—爬取某網站圖片Python爬蟲網站
- Python爬蟲之XPath語法Python爬蟲
- python動態網站爬蟲實戰(requests+xpath+demjson+redis)Python網站爬蟲JSONRedis
- python爬取股票資料並存到資料庫Python資料庫
- Python爬蟲教程-19-資料提取-正規表示式(re)Python爬蟲
- Python爬取動態載入的視訊(梨視訊,xpath)Python
- 爬蟲-使用BeautifulSoup4(bs4)解析html資料爬蟲HTML
- python爬取58同城一頁資料Python
- Python網路爬蟲資料採集實戰:Requests和Re庫Python爬蟲
- 用python爬取鏈家的租房資訊Python
- 爬蟲Selenium+PhantomJS爬取動態網站圖片資訊(Python)爬蟲JS網站Python
- Python網路爬蟲3 – 生產者消費者模型爬取某金融網站資料Python爬蟲模型網站
- Python網路爬蟲3 - 生產者消費者模型爬取某金融網站資料Python爬蟲模型網站
- 利用python爬取城市公交站點Python
- JB的Python之旅-爬取phizhub網站Python網站
- 輕鬆利用Python爬蟲爬取你想要的資料Python爬蟲
- Python爬蟲框架:scrapy爬取高考派大學資料Python爬蟲框架