2017-01-19 56 views
0

我試圖從這個網站的25個鏈接內報廢詳細 https://beta.companieshouse.gov.uk/search/companies?q=SW181Db&page=1類型錯誤:試圖打印A HREF

「/公司/ 08569390」是一個href標記時字符串的索引必須是整數基本的html代碼,所以基本上我試圖聯合base_url('https://beta.companieshouse.gov.uk/)和href中的文本,所以我可以讓我的循環遍歷25頁。

我有(下面)的代碼給我的消息TypeError:字符串索引必須是整數。

有人會好心向我解釋我哪裏錯了嗎?我需要在href的內容轉換爲整數,甚至認爲它也包含一些文本和(/公司/)

千恩萬謝

import requests 
from bs4 import BeautifulSoup 
import csv 
base_url = 'https://beta.companieshouse.gov.uk/' 

header={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
'Accept-Encoding':'gzip, deflate, sdch, br', 
'Accept-Language':'en-US,en;q=0.8,fr;q=0.6', 
'Connection':'keep-alive', 
'Cookie':'mdtp=y4Ts2Vvql5V9MMZNjqB9T+7S/vkQKPqjHHMIq5jk0J1l5l131dU0YXsq7Rr15GDyghKHrS/qcD2vdsMCVtzKByJEDZFI+roS6tN9FN5IS70q8PkCCBjgFPDZjlR1A3H9FJ/zCWXMNJbaXqF8MgqE+nhR3/lji+eK4mm/GP9b8oxlVdupo9KN9SKanxu/JFEyNXutjyN+BsxRztNem1Z+ExSQCojyxflI/tc70+bXAu3/ppdP7fIXixfEOAWezmOh3ywchn9DV7Af8wH45t8u4+Y=; mdtpdi=mdtpdi#f523cd04-e09e-48bc-9977-73f974d50cea#1484041095424_zXDAuNhEkKdpRUsfXt+/1g==; seen_cookie_message=yes; _ga=GA1.4.666959744.1484041122; _gat=1', 
'Host':'https://beta.companieshouse.gov.uk/', 
#'Referer':'https://beta.companieshouse.gov.uk/', 
'Upgrade-Insecure-Requests':'1', 
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.51 Safari/537.36' 
} 

session = requests.session() 
url = 'https://beta.companieshouse.gov.uk/search/companies?q=SW181Db&page=1' 
response = session.get(url, headers=header) 
soup = BeautifulSoup(response.content,"lxml") 

rslt_table = soup.find("article") 

for elem in rslt_table: 
    det_url = base_url+elem['href'] 
    print det_url 

回答

1

soup.find("article")是不是你如何找到所有這些公司的標籤,嘗試使用find_all代替:

base_url = 'https://beta.companieshouse.gov.uk' 

companies = soup.find_all('a', {'title': 'View company'}) # to get all company <a> tags 

for company in companies: 
    det_url = base_url+elem['href'] 
    print det_url 
+0

謝謝巴蒂爾 –

+0

如果我想提取信息我在鏈接,公司名稱,地址和公司地位等方面,最好在我現有的for循環中完成這項工作,還是應該在我目前使用的循環中創建一個新的循環?再次感謝 –

+0

確定它可以全部在一個循環中完成,您只需要首先找到包裝所有信息的'li'標籤,然後找到不同的標籤以提取相關信息:) – Shane

0

我用你的代碼打繞了一點並最終解決你的問題。我所做的更改:

links=[] 
headers=soup.findAll("h3") 
for header in headers: 
    det_url = base_url+header.find('a')['href'] 
    links.append(det_url) 
    print det_url 

print links 

我得到的輸出是:

['https://beta.companieshouse.gov.uk//company/08569390', 'https://beta.companieshouse.gov.uk//company/09947251', 'https://beta.companieshouse.gov.uk//company/07352770', 'https://beta.companieshouse.gov.uk//company/07908180', 'https://beta.companieshouse.gov.uk//company/04576887', 'https://beta.companieshouse.gov.uk//company/08760943', 'https://beta.companieshouse.gov.uk//company/08265394', 'https://beta.companieshouse.gov.uk//company/03893510', 'https://beta.companieshouse.gov.uk//company/07422059', 'https://beta.companieshouse.gov.uk//company/08819027', 'https://beta.companieshouse.gov.uk//company/08325123', 'https://beta.companieshouse.gov.uk//company/09669365', 'https://beta.companieshouse.gov.uk//company/08641990', 'https://beta.companieshouse.gov.uk//company/06318392', 'https://beta.companieshouse.gov.uk//company/09400775', 'https://beta.companieshouse.gov.uk//company/01930797', 'https://beta.companieshouse.gov.uk//company/09398542', 'https://beta.companieshouse.gov.uk//company/07784981', 'https://beta.companieshouse.gov.uk//company/07480763', 'https://beta.companieshouse.gov.uk//company/06971238'] 
0

這條線:

rslt_table = soup.find("article") 

回報你一個article元素。當你這樣做:

for elem in rslt_table: 

你過的article每個元素,因爲它們都是純文本的循環。因此elem是一個字符串,不能被另一個字符串索引,因爲您正在嘗試使用elem["href"]。你想要做的是讓內部rslt_tablea元素,而不是字符串:

for elem in rslt_table.find_all("a"): 

更改此行會給你想要的東西。