簡體   English   中英

無法從網頁中抓取某些格式混亂的字段

[英]Can't scrape certain fields having messy format from a webpage

我已經用python編寫了一個腳本來從網頁中獲取一些項目。 問題是我希望獲取的內容不在標簽,類或id中。 我只對addressphone感興趣。 所有這些都堆疊在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM