[英]Can't scrape certain fields having messy format from a webpage
我已經用python編寫了一個腳本來從網頁中獲取一些項目。 問題是我希望獲取的內容不在標簽,類或id中。 我只對address
和phone
感興趣。 所有這些都堆疊在p
標簽中。 鑒於我試圖以以下方式收集它們。
我嘗試過:
import re
import requests
from bs4 import BeautifulSoup
url = 'https://ams.contractpackaging.org/i4a/memberDirectory/?controller=memberDirectory&action=resultsDetail&directory_id=6&detail_lookup_id=90DB59F83AFA02C0'
res = requests.get(url,headers={'User-Agent':'Mozilla/5.0'})
soup = BeautifulSoup(res.text,'lxml')
address = soup.find(class_="memeberDirectory_details").find("p").text.split("Phone")[0].strip()
phone = soup.find(class_="memeberDirectory_details").find("p",text=re.compile("Phone:(.*)"))
print(address,phone)
這產生(地址包括我不想要的名稱):
Assemblers Inc.
2850 West Columbus Ave.
Chicago IL 60652
UNITED STATES
None
預期產量:
2850 West Columbus Ave.
Chicago IL 60652
UNITED STATES
(773) 378-3000
您可以嘗試使用以下代碼來提取地址和電話:
import requests
from bs4 import BeautifulSoup
from itertools import takewhile
url = 'https://ams.contractpackaging.org/i4a/memberDirectory/?controller=memberDirectory&action=resultsDetail&directory_id=6&detail_lookup_id=90DB59F83AFA02C0'
soup = BeautifulSoup(requests.get(url).text, 'lxml')
address_soup = soup.select_one('.memeberDirectory_details > p')
# remove company name in <b> tag
for b in address_soup.select('b'):
b.extract()
data = [val.strip() for val in address_soup.get_text(separator='|').split('|') if val.strip()]
address = [*takewhile(lambda k: 'Phone:' not in k, data)]
phone = [val.replace('Phone:', '').strip() for val in data if 'Phone:' in val]
print('Address:')
print('\n'.join(address))
print()
print('Phone:')
print('\n'.join(phone))
打印:
Address:
2850 West Columbus Ave.
Chicago IL 60652
UNITED STATES
Phone:
(773) 378-3000
編輯:
要查找帶有正則表達式的文本,可以執行以下操作:
phone = soup.find(class_="memeberDirectory_details").find(text=re.compile("Phone:(.*)"))
print(phone)
打印:
Phone: (773) 378-3000
而不是在<p>
標記處查找和拆分,而是查找每個單獨的字段,在<p>
處拆分並將所有<br>
項存儲在列表中。 如果列表的元素大小沒有變化,則始終可以彈出列表的第一個元素。 如果您想沿途行駛,可以在數字的第一個實例處拆分地址,但這會出錯,因為其中包含數字的公司名稱會出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.