2016-06-11 11 views
1

У меня есть следующий код, который удаляет веб-сайт для div с классом «odd» или «even». Я хотел бы сделать «странный» и «даже» аргумент, который принимает моя функция, что позволило бы мне добавить и другие div. Вот мой код:BeautifulSoup findВсе HTML-класс с несколькими входами с переменным классом

# 
# Imports 
# 

import urllib2 
from bs4 import BeautifulSoup 
import re 
import os 
from pprint import pprint 

# 
# library 
# 

def get_soup(url): 
    page = urllib2.urlopen(url) 
    contents = page.read() 
    soup = BeautifulSoup(contents, "html.parser") 
    body = soup.findAll("tr", ["even", "odd"]) 
    string_list = str([i for i in body]) 
    return string_list 


def save_to_file(path, soup): 
    with open(path, 'w') as fhandle: 
     fhandle.write(soup) 


# 
# script 
# 

def main(): 
    url = r'URL GOES HERE' 
    path = os.path.join('PATH GOES HERE') 
    the_soup = get_soup(url) 
    save_to_file(path, the_soup) 



if __name__ == '__main__': 
    main() 

Я хотел бы включить *args в код так get_soup function будет выглядеть следующим образом:

def get_soup(url, *args): 
    page = urllib2.urlopen(url) 
    contents = page.read() 
    soup = BeautifulSoup(contents, "html.parser") 
    body = soup.findAll("tr", [args]) 
    string_list = str([i for i in body]) 
    return string_list 

def main(): 
    url = r'URL GOES HERE' 
    path = os.path.join('PATH GOES HERE') 
    the_soup = get_soup(url, "odd", "even") 
    save_to_file(path, the_soup) 

К сожалению, это не работает. Идеи?

+0

У вас есть URL-адрес вашего тестового сайта? –

ответ

0

Не помещайте ARGS в списке, арг уже кортеж так просто передать, что:

body = soup.findAll("tr", args) 

Если вас [args], вы бы в конечном итоге с чем-то вроде [("odd","even")].

Также str([i for i in body]) не имеет никакого смысла, это будет то же самое, что просто делать str(body), но я не вижу, как этот формат может быть полезен.

+0

Это прекрасно! Что касается str ([i для i в теле]), это была комбинация двух функций, которые я еще не очистил. Я, очевидно, скопировал неправильную функцию, хотя и сделал то же самое, что и мой другой. Спасибо @Padraic Каннингем! – Lefty

+0

Не беспокойтесь, пожалуйста. –