性少妇vide0seⅹfree_国产剧情视频在线观看_日日碰夜夜爽_九九这里只有精品视频_性free毛茸茸偷窥videos_国产v亚洲

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁 > IT資訊 > 軟件研發(fā) > 使用Python進(jìn)行Web爬取和數(shù)據(jù)提取

使用Python進(jìn)行Web爬取和數(shù)據(jù)提取

2020-07-28 15:48:06 | 來源:中培企業(yè)IT培訓(xùn)網(wǎng)

  今天為大家介紹的是關(guān)于使用Python進(jìn)行Web爬取和數(shù)據(jù)提取的內(nèi)容。我們首先是要清楚地了解任務(wù)。他們希望我們從中抓取數(shù)據(jù),然后將其保存在CSV文件中,其中上面列出的我們將抓取信息:日期(“以下信息反映了終止{日期}的FMCSA管理信息系統(tǒng)的內(nèi)容”),運(yùn)行狀態(tài),合法名稱,DBA名稱,實(shí)際地址,郵寄地址,USDOT號(hào),動(dòng)力單元,車手。

  步驟1:了解任務(wù)

  我們可以提供100個(gè)DOT號(hào)碼的初始設(shè)置,以確保可以輕松地刮除上面的信息,從那里我們可以提供每天要刮擦的所有DOT號(hào)碼。

  報(bào)告頁面可以通過點(diǎn)或其他名稱ID進(jìn)行訪問。每個(gè)頁面都有自己的ID(點(diǎn))。因此,這些點(diǎn)位于Excel文件中。我們必須閱讀此文件并從中提取點(diǎn),然后將其傳遞到URL以訪問報(bào)告頁面。

  第2步:創(chuàng)建環(huán)境并安裝依賴項(xiàng)

  現(xiàn)在,我們知道了客戶希望從我們這里得到什么,因此讓我們創(chuàng)建虛擬環(huán)境,然后檢查將要爬網(wǎng)的元素。

  要?jiǎng)?chuàng)建virtualenv,請(qǐng)?jiān)诮K端中運(yùn)行以下命令:

  虛擬環(huán)境

  然后安裝BeautifulSoup(這是一個(gè)用于解析HTML和XML文檔的Python包)和xlrd(這是一個(gè)用于從Excel文件讀取數(shù)據(jù)并設(shè)置信息格式的庫):

  pip install beautifulsoup4 xlrd

  步驟3:檢索數(shù)據(jù)

  好了,開發(fā)人員!讓我們從打開項(xiàng)目描述的示例URL開始,剎車可以看到細(xì)分。

  提示以查看示例URL

  我們的第一個(gè)目標(biāo)是查找-日期(“以下信息反映了終止{日期}的FMCSA管理信息系統(tǒng)的內(nèi)容”)

  以下信息反映了截止日期01/01/2020的FMCSA管理信息系統(tǒng)的內(nèi)容。

  事實(shí)是,我們無法通過特定的類名或ID來檢索此元素。不幸的是,此報(bào)告頁面隱藏混亂。

  但是,我們可以將它們?nèi)孔鳛槲谋具M(jìn)行爬網(wǎng),并使用RegEx提取所需的數(shù)據(jù)。

  正則表達(dá)式(RegEx)是特殊的字符序列,可使用模式中保留的特殊語法來幫助您匹配或查找其他字符串或字符串集。

  日期位于之間。以下信息反映了FMCSA管理信息系統(tǒng)的開始日期,以及..(點(diǎn))。因此,要輸入日期正則表達(dá)式將在這些字符串之間查找。

  import re#regeximport urllib.request from urllib.request import urlopen,Requestfrom bs4 import BeautifulSoupdef crawl_data(url):

  req = Request(URL,標(biāo)頭= {'User-Agent':'Mozilla / 5.0'})

  html = urlopen(req).read()

  bs = BeautifulSoup(html,'html.parser')

  #查找所有粗體文本

  bold_texts = bs.find_all('b')

  對(duì)于b在bold_texts中:

  嘗試:

  #在這些字符串之間看

  date = re.search('以下信息反映了FMCSA管理信息系統(tǒng)自(。*)起的內(nèi)容。',b.get_text(strip = True,分隔符=''))。group(1).strip( )

  #如果正則表達(dá)式找到多個(gè)點(diǎn),則在第一個(gè)點(diǎn)之前提取字符串

  如果len(date)> 11:

  日期= date.split(“。”,1)[0]

  打印(日期)

  除了AttributeError:

  通過

  好吧,如果您運(yùn)行該程序,您將看到它正在打印日期。快速向您展示正則表達(dá)式的工作原理,因?yàn)槲矣行┤讼肓私狻?/span>

  考慮以下代碼:

  匯入

  #我們需要從字符串中提取“ coderasha”

  data =“您好,我叫Coderasha。”

  名稱= re.search('你好我的名字是(。*)。',數(shù)據(jù))

  打印(名稱)

  #輸出:<_sre.SRE_Match對(duì)象;span =(0,27),match ='你好,我叫Coderasha。'>

  group(1)將其中正則表達(dá)式匹配的文本捕獲到一個(gè)編號(hào)組中,該編號(hào)組可以與編號(hào)后向引用一起重用

  匯入

  #我們需要從字符串中提取“ coderasha”

  data =“您好,我叫Coderasha。”

  名稱= re.search('你好我的名字是(。*)。',數(shù)據(jù)).group(1)

  打印(名稱)

  #輸出:coderasha

  因此,我正在應(yīng)用相同的邏輯來查找爬網(wǎng)的串行中的日期。

  但是,我們必須使用RegEx再次查找數(shù)據(jù),因?yàn)楸碓貨]有任何特殊屬性。

  #獲取表格內(nèi)的所有文本

  信息= bs.find('中心').get_text(strip =真,分隔符='')#使用RegEx查找字段

  Operating = re.search('Operating Status:(。*)Out',information).group(1).strip()

  legal_name = re.search('法律名稱:(。*)DBA',信息).group(1).strip()

  physical_address = re.search('Physical Address:(。*)Phone',information).group(1).strip()

  mailing_address = re.search('郵件地址:(。*)USDOT',信息).group(1).strip()

  usdot_address = re.search('USDOT號(hào):(。*)國家運(yùn)營商ID號(hào)',信息).group(1).strip()

  power_units = re.search('Power Units:(。*)Drivers',information).group(1).strip()

  drivers = re.search('Drivers:(。*)MCS-150表格日期',信息).group(1).strip()

  步驟4:以CSV格式寫入資料

  抓取數(shù)據(jù)后,就該創(chuàng)建新的csv文件鏈接數(shù)據(jù)寫入其中了。我更喜歡創(chuàng)建另一個(gè)函數(shù)來處理此操作。

  導(dǎo)入csvdef write_csv(日期,運(yùn)行,legal_name,物理地址,mailing_address,usdot_address,power_units,驅(qū)動(dòng)程序):

  使用open(usdot_address +'.csv',mode ='w',newline ='',encoding =“ utf-8”)作為csv_file:

  字段名稱= [“日期”,“運(yùn)行狀態(tài)”,“法律名稱”,“物理地址”,“郵寄地址”,“動(dòng)力裝置”,“驅(qū)動(dòng)程序”]

  writer = csv.DictWriter(csv_file,fieldnames = fieldnames)

  writer.writeheader()

  writer.writerow({''Date':date,'Operating Status':Operating,'Legal_Name':legal_name,'Physical Address':physical_address,'Mailing Address':mailing_address,'Power Units:power_units,'Drivers':drivers })

  CSV名稱必須唯一,因此我用usdot_address或使用已抓取數(shù)據(jù)的報(bào)告頁面的其他名稱ID。

  步驟5:讀取Excel文件以抓取每個(gè)點(diǎn)的數(shù)據(jù)

  最后一步是讀取excel文件,將這些點(diǎn)傳遞到URL的末尾以訪問頁面。我們可以用xlrd讀取Excel文件。

  導(dǎo)入xlrd

  點(diǎn)= [] def read_excel_file():

  loc =(“ dots.xls”)

  wb = xlrd.open_workbook(loc)

  工作表= wb.sheet_by_index(0)

  sheet.cell_value(0,0)

  #Excel中的前五個(gè)點(diǎn)

  對(duì)于我在范圍(1,5)中:

  #將浮點(diǎn)數(shù)轉(zhuǎn)換為字符串并從.0清除

  點(diǎn)= str(sheet.cell_value(i,0))。replace('。0','')

  dots.append(dot)

  xlrd將數(shù)字讀取為浮點(diǎn)數(shù),因此最好的解決方案是將數(shù)字轉(zhuǎn)換為字符串并使用

  更換()

  刪除字符串.0結(jié)尾將這些點(diǎn)傳遞到url中的方法:

  對(duì)于點(diǎn)中的點(diǎn):

  crawl_data

  #睡眠5秒,避免任何錯(cuò)誤

  time.sleep(5)

  這是完整代碼:

  導(dǎo)入重新導(dǎo)入csv導(dǎo)入urllib.request從urllib.request導(dǎo)入urlopen,Requestfrom bs4導(dǎo)入BeautifulSoupimport xlrd導(dǎo)入時(shí)間

  點(diǎn)= [] def read_excel_file():

  loc =(“ dots.xls”)

  wb = xlrd.open_workbook(loc)

  工作表= wb.sheet_by_index(0)

  sheet.cell_value(0,0)

  對(duì)于我在范圍(1,5)中:

  點(diǎn)= str(sheet.cell_value(i,0))。replace('。0','')

  dots.append(dot)def crawl_data(url):

  req = Request(URL,標(biāo)頭= {'User-Agent':'Mozilla / 5.0'})

  html = urlopen(req).read()

  bs = BeautifulSoup(html,'html.parser')

  bold_texts = bs.find_all('b')

  對(duì)于b在bold_texts中:

  嘗試:

  date = re.search('以下信息反映了FMCSA管理信息系統(tǒng)自(。*)起的內(nèi)容。',b.get_text(strip = True,分隔符=''))。group(1).strip( )

  如果len(date)> 11:

  日期= date.split(“。”,1)[0]

  打印(日期)

  除了AttributeError:

  通過

  信息= bs.find('中心').get_text(strip =真,分隔符='')

  Operating = re.search('Operating Status:(。*)Out',information).group(1).strip()

  legal_name = re.search('法律名稱:(。*)DBA',信息).group(1).strip()

  physical_address = re.search('Physical Address:(。*)Phone',information).group(1).strip()

  mailing_address = re.search('郵件地址:(。*)USDOT',信息).group(1).strip()

  usdot_address = re.search('USDOT號(hào):(。*)國家運(yùn)營商ID號(hào)',信息).group(1).strip()

  power_units = re.search('Power Units:(。*)Drivers',information).group(1).strip()

  drivers = re.search('Drivers:(。*)MCS-150表格日期',信息).group(1).strip()

  def write_csv(日期,運(yùn)作,法定名稱,物理地址,mailing_address,usdot_address,power_units,驅(qū)動(dòng)程序)def write_csv(日期,運(yùn)作,合法名稱,物理地址,mailing_address,usdot_address,power_units,驅(qū)動(dòng)程序):

  使用open(usdot_address +'.csv',mode ='w',newline ='',encoding =“ utf-8”)作為csv_file:

  字段名稱= [“日期”,“運(yùn)行狀態(tài)”,“法律名稱”,“物理地址”,“郵寄地址”,“動(dòng)力裝置”,“驅(qū)動(dòng)程序”]

  writer = csv.DictWriter(csv_file,fieldnames = fieldnames)

  writer.writeheader()

  writer.writerow({''Date':date,'Operating Status':Operating,'Legal_Name':legal_name,'Physical Address':physical_address,'Mailing Address':mailing_address,'Power Units:power_units,'Drivers':drivers })

  read_excel_file()

  以點(diǎn)為單位打印(點(diǎn)):

  crawl_data

  time.sleep(5)

  任務(wù)完成!

  以上就是關(guān)于使用Python進(jìn)行Web爬取和數(shù)據(jù)提取的全部內(nèi)容,想了解更多關(guān)于Python的信息,請(qǐng)繼續(xù)關(guān)注我們吧。

標(biāo)簽: Python Web爬取
主站蜘蛛池模板: 国产精品av久久久久久网站 | 毛片电影网站 | 最近2018中文字幕视频免费看 | 成年人视频在线免费 | 伊人激情四射 | 91色九色 | chinese70河南老太 | 肉感饱满中年熟妇日本 | 精品国产一区二区三区久久久蜜月 | 67194久久| 国产精品成人在线视频 | 国产欧美日韩电影 | 国产日韩在线时看 | av大片网站 | 污污网站18禁在线永久免费观看 | 日韩高清区 | 毛片内射 | 成人美女黄网站色大免费的 | 在线日本看片免费人成视久网 | 亚洲第一会所 | jαpαnesehd熟女熟妇伦 | 日韩最新免费无码视频 | 欧美亚洲另类丝袜综合网 | 日日摸夜夜添夜夜添人人老牛 | 啪啪在线视频 | 五月色丁香综缴合 | 三级福利视频 | 夜夜躁日日躁 | 三级电影一区 | 国产人妻精品无码AV | 亚洲资源AV无码日韩AV无码 | 国产激情视频一区 | 欧美三级免费 | 国产一区二区中文字幕 | 女人被躁到高潮视频免费软件 | 国产精品色av | 欧美日韩精品一区二区三区视频 | 亚洲视频中文播放无线播放专区播放 | 麻豆tv在线 | 午夜性色福利在线视频18观看 | 天天躁日日躁狠狠躁av麻豆男男 |