div中内容靠右_python读取excel的公司名称信息,并爬虫获取公司的经营范围信息,回填到excel中...
大家總說,python今天學明天忘,沒有實際操作,想要知道哪里有練手的機會。其實你要善于發現問題,捕捉問題。不管是你看到文章中的一些案例,還是微信群友問的一個問題。你都需要仔細思考,如果是你做你應該怎么做?本文就是一個很好的說明!
1、項目需求
項目需求:這個問題是朋友托我幫完成一份地區教育類型公司的經營范圍。已有信息:表中已經有了公司的名稱及地點等信息。缺省信息:但是還缺少經營范圍。出現的問題:由于數據量比較大,一個一個的去百度搜再復制到表里,工作量有點大,可能需要我好幾天不吃不喝的Ctrl c、Ctrl v,這樣顯然不是個好辦法。解決辦法:我們可以利用python從excel中把公司名稱都讀出來,然后讓它自動去網頁中,搜索獲取該公司的經營范圍,并批量回填到excel中。
2、完成步驟
拿到這個問題,我首先想到的是利用selenium自動化測試工具??梢岳迷摴ぞ?#xff0c;模擬人為操作瀏覽器,來獲取公司的經營范圍,并將獲取到的數據抓取下來,批量填回到excel中。
1)安裝selenium模塊和下載chromedriver驅動
① 安裝selenium庫
② 下載chromedriver驅動
下載地址:http://chromedriver.storage.googleapis.com/index.html注意事項一:
下載的chromedriver驅動必須和谷歌瀏覽器相匹配。注意事項二:
下載好的chromedriver.exe文件,需要放到python的安裝路徑下或者scripts目錄下(如圖所示)。接著,進行一個小的測試。導入webdriver后,我們先利用代碼看看是否可以打開瀏覽器。如果可以正常打開,說明selenium安裝配置沒有問題。
browser?=?webdriver.Chrome()
首先,在編輯器中輸入以下代碼??梢钥吹健惫雀铻g覽器“被自動打開了。上面只是做了一個小的測試。下面我們以訪問百度為例,做一個簡單的測試。
from?selenium?import?webdriver#?打開谷歌瀏覽器
browser?=?webdriver.Chrome()
try:
????#?獲取訪問地址www.baidu.com
????browser.get("https://www.baidu.com")
????#?通過id獲取到百度搜索輸入框并賦予搜索條件
????browser.find_element_by_id('kw').send_keys('python')
????#?通過id獲取到搜索按鈕并賦予點擊操作
????browser.find_element_by_id('su').click()
except?Excception?as?e:
????print("搜索失敗:{}".format(e))
從下圖可以看到:瀏覽器被成功打開,同時也打開了百度的頁面。同時在輸入框中自動輸入了python二字,并成功點擊進行了搜索。
至于怎么定位到百度瀏覽器輸入框和搜索按鈕的id,我們可以通過F12查看頁面元素來獲取其實,進行界面定位的方式有很多,我們選取自己最喜歡、最熟悉的方式即可。下面我列舉了一些定位方法,大家可以自行下去嘗試。
find_element_by_idfind_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
2)進入主題(分析思路)
好了!基礎的搜索步驟已經差不多了,我們來進入正題,公司經營范圍一般我們可以去百度信譽去查詢。
百度信譽的網址:https://xin.baidu.com/
我們仔細查看下圖:這個查詢是直接把查詢條件拼接在地址后面的一個get請求。
這樣就說明,我們根本就不需要通過模擬瀏覽器去查詢數據了,直接請求這個地址就可以獲取到數據了,瞬間工作量少了很多哈哈哈哈,那我們就開始吧。既然直接可以請求地址獲取數據,那我們就解析獲取到的數據,拿到我們想要的東西就好了,這里我習慣用xpath來解析,感興趣的也可以用正則等其他方法解析。
我需要企業的經營范圍信息,點擊F12選中經營范圍元素,我們要的數據就是這個,右擊這個標簽選擇Copy選項 --> Copy XPath復制這個標簽的xpath信息。我們通過xpath去解析頁面內容需要先安裝一下lxml模塊和requests模塊。上述粘貼到的xpath信息,后面接上text()便可以獲取到標簽的文本信息了。
import?requests
root?=?etree.HTML(requests.get("https://xin.baidu.com/s?q="+"百度").text)
scope?=?root.xpath("/html/body/div[2]/div/div[2]/div[5]/div[1]/div[1]/div[2]/div/div[1]/span[5]/span[2]/text()")
print(scope)
獲取到的內容如下:但是我們仔細一看,這里獲取到的經營范圍是帶了省略號的,所以是不完整的。
我們再看看頁面,發現頁面上外面的標簽中才是完整的信息,但是此時我們用text()是獲取不到的,這個時候得用@來選擇屬性,獲取data-content中的信息。修改后的代碼:
import?requests
root?=?etree.HTML(requests.get("https://xin.baidu.com/s?q="+"百度").text)
scope?=?root.xpath("/html/body/div[2]/div/div[2]/div[5]/div[1]/div[1]/div[2]/div/div[1]/span[5]/@data-content")
print(scope)
單條數據的獲取我們已經可以實現了,接下來我們就可以進行批量操作了,把查詢參數換成可變的、從excel中讀取的。
我們先來實現從excel中讀取到數據吧,開干。\讀取excel我這里用的是xlrd模塊,先事先安裝一下這個庫。我們把excel表中的數據讀出來打印出來看一下,表格信息大致如下。
#讀取本地的excel文件
wb?=?xlrd.open_workbook("教育類.xls",formatting_info=True)
#獲取sheet1
sheet?=?wb.sheet_by_index(0)
#遍歷每行數據
for?i?in?range(sheet.nrows):
????if(i!=0):
????????#獲取到excel表中的第三列的數據
????????query?=?sheet.cell_value(i,2)
????????print(query)
查詢的參數我們也讀出來了,下面可以先把這塊的代碼合二為一,批量獲取經營范圍數據,這里為了方便我就先不寫成獨立的方法了,直接放在一起了。
import?xlrdfrom?lxml?import?etree
import?requests
import?time
#讀取本地的excel文件
wb?=?xlrd.open_workbook("教育類.xls",formatting_info=True)
#獲取sheet1
sheet?=?wb.sheet_by_index(0)
#遍歷每行數據
for?i?in?range(sheet.nrows):
????if(i!=0):
????????#獲取到excel表中的第三列的數據
????????query?=?sheet.cell_value(i,2)
????????print(query)
????????root?=?etree.HTML(requests.get("https://xin.baidu.com/s?q="+query).text)
????????scope=?root.xpath("/html/body/div[2]/div/div[2]/div[5]/div[1]/div[1]/div[2]/div/div[1]/span[5]/@data-content")
????????data.append(scope[0])
????????time.sleep(1)
print(data)??
data輸出是一個數組,存儲著excel表中所有公司的經營范圍信息。數據有了,接下來我們就把數據寫入excel中,把數據完善。向excel中寫入內容,使用的是xlwt,因此又得安裝一下xlwt模塊。我們寫入的方法,是利用復制一份寫入數據,再覆蓋的方法,所以還得安裝xlutils模塊使用它的copy方法。完整的代碼如下:
import?xlrdimport?xlwt
from?lxml?import?etree
import?requests
import?time
from?xlutils.copy?import?copy
wb?=?xlrd.open_workbook("教育類.xls",formatting_info=True)
sheets?=?wb.sheet_names()
sheet?=?wb.sheet_by_index(0)
data?=?[]
for?i?in?range(sheet.nrows):
????if(i!=0):
????????query?=?sheet.cell_value(i,2)
????????root?=?etree.HTML(requests.get("https://xin.baidu.com/s?q="+query).text)
????????scope?=?root.xpath("/html/body/div[2]/div/div[2]/div[5]/div[1]/div[1]/div[2]/div/div[1]/span[5]/@data-content")
????????data.append(scope[0])
????????time.sleep(1)
wb?=?xlrd.open_workbook("教育類.xls",formatting_info=True)
old?=?copy(wb)
ws?=?old.get_sheet(0)
for?j?in?range(len(data)):
????print(data[j])
????print('\n')
????ws.write(j+1,7,data[j])
old.save("教育類.xls")
運行結束之后可以發現:excel中的經營范圍已經有數據了,整個過程就結束了,收工。代碼比較簡單隨意,主要是一個思路,本人也是個初學者,python只是個閑時愛好,不專業,有不對的地方歡迎大佬們指正,共同進步。
總結
以上是生活随笔為你收集整理的div中内容靠右_python读取excel的公司名称信息,并爬虫获取公司的经营范围信息,回填到excel中...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: drive数据集_英伟达的最强人脸GAN
- 下一篇: factorybean 代理类不能按照类