2016-12-16 13 views
0
import requests, os 
from bs4 import BeautifulSoup 


directory = os.path.normpath("C:\\Users\x\\Desktop\\names.txt") 
f = open(directory, 'r', encoding='utf8') 
x = f.readlines() 
for line in x: 
    s = line.split(",")[0].replace(" ","") 
    n = line.split(",")[1].replace(" ","") 
    print(s + " " + n) 

    res = requests.get('http://www.scopus.com/results/authorNamesList.uri? origin=searchauthorlookup&src=al&edit=&poppUp=&basicTab=&affiliationTab=&advancedTab=&st1=' + s + '&st2=' + n + '&institute=&orcidId=&authSubject=LFSC&_authSubject=on&authSubject=HLSC&_authSubject=on&authSubject=PHSC&_authSubject=on&authSubject=SOSC&_authSubject=on&s=AUTH--LAST--NAME%28' + s + '%29+AND+AUTH--FIRST%28' + n + '%29&sdt=al&sot=al&searchId=81BECD653C7453F7BFBBB1CD8D8E5B04.wsnAw8kcdt7IPYLO0V48gA%3A220&exactSearch=off&sid=81BECD653C7453F7BFBBB1CD8D8E5B04.wsnAw8kcdt7IPYLO0V48gA%3A220') 
    content = res.content  
    soup = BeautifulSoup(content, 'lxml').find_all('div', {'class':'dataCol2'}) 
    for item in soup: 
     print(item.text) 
     break 

beautifulsoup. (Content, 'lxml'). Find_all работает только для последней строки по x. Как я могу это решить?Python BeautifulSoup find_all() не работает в цикле

+0

Удалить пространство между '.uri и' origin' – MYGz

+0

, что это ошибка, когда я поставил код здесь?. обычно между ними нет места. res.content получает разные значения для каждой итерации, но beautifulsoup.find_all работает только для последней итерации. Мне нужно решить это – tech197

+0

Можете ли вы включить первые 2-3 строки 'names.txt?' – MYGz

ответ

0

Это работает, как ожидалось:

import requests, os 
from bs4 import BeautifulSoup 


x=["Aaroe, L","Abbas, Z","Abbott, G"] 

for line in x: 
    l=line.split(',') 
    s=l[0].strip() 
    n=l[1].strip() 
    print("------------------------------------") 
    print("FirstName: "+s + ", Last Name: " + n) 
    res = requests.get('http://www.scopus.com/results/authorNamesList.uri?origin=searchauthorlookup&src=al&edit=&poppUp=&basicTab=&affiliationTab=&advancedTab=&st1=' + s + '&st2=' + n + '&institute=&orcidId=&authSubject=LFSC&_authSubject=on&authSubject=HLSC&_authSubject=on&authSubject=PHSC&_authSubject=on&authSubject=SOSC&_authSubject=on&s=AUTH--LAST--NAME%28' + s + '%29+AND+AUTH--FIRST%28' + n + '%29&sdt=al&sot=al&searchId=81BECD653C7453F7BFBBB1CD8D8E5B04.wsnAw8kcdt7IPYLO0V48gA%3A220&exactSearch=off&sid=81BECD653C7453F7BFBBB1CD8D8E5B04.wsnAw8kcdt7IPYLO0V48gA%3A220') 
    content = res.content  
    soup = BeautifulSoup(content, 'lxml').find_all('div', {'class':'dataCol2'}) 
    for item in soup: 
     print(item.text.strip()) 
     break 

Выход:

------------------------------------ 
FirstName: Aaroe, Last Name: L 
Aarøe, Lene 



Aaroe, Lene 
------------------------------------ 
FirstName: Abbas, Last Name: Z 
Abbas, Zaigham 



Abbas, Z. 


ABBAS, ZAIGHAM 
------------------------------------ 
FirstName: Abbott, Last Name: G 
Abbott, Albert Glenn 



Abbott, A. G. 


Abbott, Albert G. 


Abbott, A. 
+0

Почему он не работал без полосы()? – tech197

+0

@ tech197 strip() удаляет все пробелы, включая новую строку. Вы не удаляли '\ n', который был добавлен к последней фамилии. – MYGz

Смежные вопросы