您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎么在python中利用Selenium+Requests爬取數據,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
python的數據類型:1. 數字類型,包括int(整型)、long(長整型)和float(浮點型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運算,有兩個值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數據類型,集合中可以放任何數據類型。5. 元組,元組用”()”標識,內部元素用逗號隔開。6. 字典,字典是一種鍵值對的集合。7. 集合,集合是一個無序的、不重復的數據組合。
觀察頁面可知,頁面數據屬于動態加載 所以現在我們通過抓包工具,獲取數據包
觀察其url和參數
url="https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false" 參數: city=%E5%8C%97%E4%BA%AC ==》城市 first=true ==》無用 pn=1 ==》頁數 kd=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90 ==》商品關鍵詞
所以我們要想實現全站爬取,需要有city和頁數
我們打開拉勾網,觀察后發現,他的數據并不是完全展示的,比如說 在城市篩選選擇全國 僅僅只顯示30頁 但總頁數是遠遠大于30頁的;我又選擇北京發現是30頁又選擇北京下的海淀區又是30頁,可能我們無法把數據全部的爬取,但我們可以盡可能的將數據多的爬取
我們為了獲取全站數據,必然離不開的有兩個參數 一個是城市一個是頁數,所以我們利用selenium自動化去獲取所有城市和對應頁數
def City_Page(self): City_Page={} url="https://www.lagou.com/jobs/allCity.html?keyword=%s&px=default&companyNum=0&isCompanySelected=false&labelWords="%(self.keyword) self.bro.get(url=url) sleep(30) print("開始獲取城市及其最大頁數") if "驗證系統" in self.bro.page_source: sleep(40) html = etree.HTML(self.bro.page_source) city_urls = html.xpath('//table[@class="word_list"]//li/input/@value') for city_url in city_urls: try: self.bro.get(city_url) if "驗證系統" in self.bro.page_source: sleep(40) city=self.bro.find_element_by_xpath('//a[@class="current_city current"]').text page=self.bro.find_element_by_xpath('//span[@class="span totalNum"]').text City_Page[city]=page sleep(0.5) except: pass self.bro.quit() data = json.dumps(City_Page) with open("city_page.json", 'w', encoding="utf-8")as f: f.write(data) return City_Page
我們有了每個城市對應的最大頁數,就可以生成訪問頁面所需的參數
def Params_List(self): with open("city_page.json", "r")as f: data = json.loads(f.read()) Params_List = [] for a, b in zip(data.keys(), data.values()): for i in range(1, int(b) + 1): params = { 'city': a, 'pn': i, 'kd': self.keyword } Params_List.append(params) return Params_List
最后我們可以通過添加請求頭和使用params url來訪問頁面獲取數據
def Parse_Data(self,params): url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false" header={ 'referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36', 'cookie':'' } try: text = requests.get(url=url, headers=header, params=params).text if "頻繁" in text: print("操作頻繁,已被發現 當前為第%d個params"%(i)) data=json.loads(text) result=data["content"]["positionResult"]["result"] for res in result: with open(".//lagou1.csv", "a",encoding="utf-8") as f: writer = csv.DictWriter(f, res.keys()) writer.writerow(res) sleep(1) except Exception as e: print(e) pass
以上就是怎么在python中利用Selenium+Requests爬取數據,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。