2017-01-26 7 views
0

Ich habe ein Code-Segment, das link s besucht und versucht, in jedem in jedem link zu finden.Datentyp nicht übereinstimmend beautifulsoup TypeError: nicht hashbar Typ: 'list'

Wenn schließlich ein link hat eine oder mehr der keywords speichert es in einem list.

Allerdings, wenn ich meinen Code ausführen es gibt mir eine Ausgabe von: TypeError: unhashable type: 'list' auf dieser Linie:

for a in soup.find_all('a', class_="result-title hdrlnk", text=re.compile(job_kw,re.IGNORECASE)): 

Hier ist der Code:

jobs_by_city = [ 
'http://boston.website.org/search/widget', 
] 

job_kw = [['web site','user', 'account'],['permission', 'name']] 
job_kw = sum(job_kw, []) 

jobs = [] 

for job_in_city in jobs_by_city: 
    a_job = requests.get(job_in_city) 
    soup = BeautifulSoup(a_job.text, "lxml") 
    for a in soup.find_all('a', class_="result-title hdrlnk", text=re.compile(job_kw,re.IGNORECASE)): 
     print(a.get('href')) 
     #jobs.append(a.get('href')) 

Was mache ich falsch hier?

+0

Welche „Beautiful Soup“ Version suchen verwenden Sie? 're.compile' nimmt keine Liste als Muster. Ich denke, Sie können die Liste einfach als 'Text' Argument übergeben. In BS v4 können Sie eine Liste an 'string' Argument übergeben. – Himal

Antwort

0

re.compile nimmt list nicht als Eingabe. Sie haben über die Schlüsselwörter iterieren:

from bs4 import BeautifulSoup 
import requests 
import re 

jobs_by_city = [ 
'http://boston.website.org/search/widget', 
] 

job_kws = [['web site','user', 'account'],['permission', 'name']] 
job_kws = sum(job_kws, []) 

jobs = [] 

for job_in_city in jobs_by_city: 
    a_job = requests.get(job_in_city) 
    soup = BeautifulSoup(a_job.text, "lxml") 
    for job_kw in job_kws: 
     for a in soup.find_all('a', class_="result-title hdrlnk", text=re.compile(job_kw,re.IGNORECASE)): 
      print(a.get('href')) 
      #jobs.append(a.get('href')) 

Die angegebene URL bietet nicht die HTML-Elemente, die Sie für :)

Verwandte Themen