2015-12-06 24 views
1

我可以刮jquery對象嗎? 我其實想要從jquery對象中獲取所有的href鏈接。 我怎麼能做到這一點? 我剛剛在不到一週前從YouTube和互聯網上了解到Python網絡抓取。無法做到jQuery對象上刮href

url_1='http://ws.bursamalaysia.com/market/listed-companies/company-announcements/announcements_listing_f.html?_=1449326650932&callback=jQuery16208050466175191104_1449326525662&page_category=company&category=FA&sub_category=all&all_gm=&alphabetical=All&board=&sector=&date_from=&date_to=&company=5218&page=&testing=' 

#Standard url request 
    req = urllib.request.Request(url_1, headers=headers) 
    resp = urllib.request.urlopen(req) 
    respData = resp.read() 

    soup = BeautifulSoup(respData, 'html.parser') 
    #soup.prettify() 

    pattern=re.compile("href") 
    links = soup.find_all(text=pattern) 
    print(links) 

我仍然無法獲得所有鏈接。 它從\n許多\\\n返回。爲什麼會發生? 我應該將它們轉換爲字符串嗎?

我嘗試使用

links = soup.find_all('a') 
print(links) 

但它返回[]。爲什麼?

我可以在正常的網頁中獲得href鏈接,但不能在jquery對象上獲得。

回答

1

我沒有調試你的代碼,但是從你提供的url的響應中,我可以看到html內容是一個值,在對象的鍵值對中。所以爲了製作好湯,你需要首先提取這個html。使用requests你可以像下面這樣做。

import re 
import json 

from bs4 import BeautifulSoup 
import requests 


url='http://ws.bursamalaysia.com/market/listed-companies/company-announcements/announcements_listing_f.html?_=1449326650932&callback=jQuery16208050466175191104_1449326525662&page_category=company&category=FA&sub_category=all&all_gm=&alphabetical=All&board=&sector=&date_from=&date_to=&company=5218&page=&testing=' 
pat = re.compile(r'\(\s*(\{[\s,\w,\W]*\})\s*\)') 

r = requests.get(url) 
js_obj = json.loads(pat.search(r.text).group(1)) 

soup = BeautifulSoup(js_obj.get('html'), 'lxml') 

links = map(lambda a: a.get('href'), soup.find_all('a')) 

for link in links: 
    print(link) 

這將產生一個輸出,如:

/market/listed-companies/list-of-companies/plc-profile.html?stock_code=5218 
/market/listed-companies/company-announcements/4867445 
/market/listed-companies/list-of-companies/plc-profile.html?stock_code=5218 
/market/listed-companies/company-announcements/4772849 
.... 
+0

js_obj = json.loads(pat.search(r.content)。集團(1)) 類型錯誤:不能使用字符串模式在類似字節的對象上 – casual

+0

我得到了上述錯誤。爲什麼有時會出現這個錯誤。是因爲我使用最新的python3.5嗎?我使用pycharm4.5免費版。 – casual

+0

如何在此發佈代碼?'code' – casual