Python如何使用BeautifulSoup爬取網(wǎng)頁信息
這篇文章主要介紹了Python如何使用BeautifulSoup爬取網(wǎng)頁信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
簡單爬取網(wǎng)頁信息的思路一般是
1、查看網(wǎng)頁源碼
2、抓取網(wǎng)頁信息
3、解析網(wǎng)頁內(nèi)容
4、儲存到文件
現(xiàn)在使用BeautifulSoup解析庫來爬取刺猬實習(xí)Python崗位薪資情況
一、查看網(wǎng)頁源碼
這部分是我們需要的內(nèi)容,對應(yīng)的源碼為:
分析源碼,可以得知:
1、崗位信息列表在<section class="widget-job-list">中
2、每條信息在<article class="widget item">中
3、對于每條信息,我們需要提取出的內(nèi)容是 公司名稱,職位, 薪資
二、抓取網(wǎng)頁信息
使用request.get()抓取,返回的soup是網(wǎng)頁的文本信息
def get_one_page(url): response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") return soup
三、解析網(wǎng)頁內(nèi)容
1、找到起始位置<section>
2、在<article>中匹配到各項信息
3、返回信息列表用以存儲
def parse_page(soup): #待存儲的信息列表 return_list = [] #起始位置 grid = soup.find('section', attrs={"class": "widget-job-list"}) if grid: #找到所有的崗位列表 job_list = soup.find_all('article', attrs={"class": "widget item"}) #匹配各項內(nèi)容 for job in job_list: #find()是尋找第一個符合的標(biāo)簽 company = job.find('a', attrs={"class": "crop"}).get_text().strip()#返回類型為string,用strip()可以去除空白符,換行符 title = job.find('code').get_text() salary = job.find('span', attrs={"class": "color-3"}).get_text() #將信息存到列表中并返回 return_list.append(company + " " + title + " " + salary) return return_list
四、存儲到文件
將列表信息存儲到shixi.csv文件中
def write_to_file(content): #以追加的方式打開,設(shè)置編碼格式防止亂碼 with open("shixi.csv", "a", encoding="gb18030")as f: f.write("\n".join(content))
五、爬取多頁信息
在網(wǎng)頁url中 可以看到最后的page代表的是頁數(shù)信息
所以在main方法中傳入一個page,然后循環(huán)運(yùn)行main(page)就可以爬取多頁信息了
def main(page): url = 'https://www.ciweishixi.com/search?key=python&page=' + str(page) soup = get_one_page(url) return_list = parse_page(soup) write_to_file(return_list) if __name__ == "__main__": for i in range(4): main(i)
六、運(yùn)行結(jié)果
七、完整代碼
import requests import re from bs4 import BeautifulSoup def get_one_page(url): response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") return soup def parse_page(soup): #待存儲的信息列表 return_list = [] #起始位置 grid = soup.find('section', attrs={"class": "widget-job-list"}) if grid: #找到所有的崗位列表 job_list = soup.find_all('article', attrs={"class": "widget item"}) #匹配各項內(nèi)容 for job in job_list: #find()是尋找第一個符合的標(biāo)簽 company = job.find('a', attrs={"class": "crop"}).get_text().strip()#返回類型為string,用strip()可以去除空白符,換行符 title = job.find('code').get_text() salary = job.find('span', attrs={"class": "color-3"}).get_text() #將信息存到列表中并返回 return_list.append(company + " " + title + " " + salary) return return_list def write_to_file(content): #以追加的方式打開,設(shè)置編碼格式防止亂碼 with open("shixi.csv", "a", encoding="gb18030")as f: f.write("\n".join(content)) def main(page): url = 'https://www.ciweishixi.com/search?key=python&page=' + str(page) soup = get_one_page(url) return_list = parse_page(soup) write_to_file(return_list) if __name__ == "__main__": for i in range(4): main(i)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中的getattribute 、getattr、setattr方法詳解
這篇文章主要介紹了python中的getattribute 、getattr、setattr方法詳解,python類中默認(rèn)有一些特殊方法,這篇文章記錄一下特殊方法的功能及用法,需要的朋友可以參考下2023-11-11python?Ajenti控制面板輕松地管理所有服務(wù)器網(wǎng)站
Ajenti是一個值得擁有的管理面板,免費(fèi)開源的管理面板工具,可以幫助你集中管理多個服務(wù)器和網(wǎng)站,Ajenti?支持?Linux、BSD、Mac?OS?X和Windows?等多個操作系統(tǒng),并且可以通過一個直觀的?Web?界面來完成各種系統(tǒng)管理任務(wù)2024-01-01jupyter?notebook?自定義python解釋器的過程詳解
大家都知道jupyter?notebook?網(wǎng)頁版交互環(huán)境,類似于ipython,功能強(qiáng)大,這篇文章主要介紹了jupyter?notebook?自定義python解釋器的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10