2015-11-01 3 views
0

Итак, поскольку мне нужны более подробные данные, я должен углубиться в HTML-код веб-сайта. Я написал сценарий, который возвращает мне список конкретных ссылок на подробные страницы, но я не могу заставить Python искать каждую ссылку этого списка для меня, он всегда останавливается на первом. Что я делаю не так?Python не ведет список ссылок

from BeautifulSoup import BeautifulSoup 
import urllib2 
from lxml import html 
import requests 

#Open site 
html_page = urllib2.urlopen("http://www.sitetoscrape.ch/somesite.aspx") 

#Inform BeautifulSoup 
soup = BeautifulSoup(html_page) 

#Search for the specific links 
for link in soup.findAll('a', href=re.compile('/d/part/of/thelink/ineed.aspx')): 
    #print found links 
    print link.get('href') 
    #complete links 
    complete_links = 'http://www.sitetoscrape.ch' + link.get('href') 
    #print complete links 
    print complete_links 
# 
#EVERYTHING WORKS FINE TO THIS POINT 
# 

page = requests.get(complete_links) 
tree = html.fromstring(page.text) 

#Details 
name = tree.xpath('//dl[@class="services"]') 

for i in name: 
    print i.text_content() 

также: Какой учебник вы можете порекомендовать мне, чтобы узнать, как поместить мой вывод в файл и очистить его, дать имена переменных, и т.д.?

+0

Ваш запрос 'GET' с использованием' complete_links' не находится внутри цикла for, поэтому он будет запускаться только один раз с последним значением 'complete_links', принятым до выхода из цикла – lemonhead

+0

, который вы переписываете' complete_links' в каждом цикле, является это правильно? Или вам нужен список ссылок? – Pynchia

+0

Возможно ли, что 'complete_links' рассматривается как список значений, которые проверяются? – Chris

ответ

0

Я думаю, что вы хотите получить список ссылок в complete_links вместо ссылка. Поскольку @Pynchia и @lemonhead сказали, что вы перезаписываете complete_links каждую итерацию первого цикла.

Вам необходимы два изменения:

  • Append ссылка на список и использовать его в цикл и лом каждого звено

    # [...] Same code here 
    
    links_list = [] 
    for link in soup.findAll('a', href=re.compile('/d/part/of/thelink/ineed.aspx')): 
        print link.get('href') 
        complete_links = 'http://www.sitetoscrape.ch' + link.get('href') 
        print complete_links 
        link_list.append(complete_links) # append new link to the list 
    
  • Scrap каждый накопил ссылку в другом цикле

    for link in link_list: 
        page = requests.get(link) 
        tree = html.fromstring(page.text) 
    
        #Details 
        name = tree.xpath('//dl[@class="services"]') 
    
        for i in name: 
         print i.text_content() 
    

PS: Я повторно commend scrapy framework для таких задач.

+0

Большое спасибо! Я определенно займу некоторое время, чтобы изучить документацию по скрипированию! – Chris

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