Python BeautifulSoup webcrawling:格式化输出

时间:2015-06-25 15:24:10

标签: python beautifulsoup web-crawler

我尝试抓取的网站是http://www.boxofficemojo.com/yearly/chart/?yr=2013&p=.htm。我现在关注的具体页面是http://www.boxofficemojo.com/movies/?id=catchingfire.htm

从这个页面来看,我遇到了两件事情。第一件事是“外国总收入”金额(在总终身收入总额下)。我得到了这个函数的数量:

def getForeign(item_url):
    response = requests.get(item_url)
    soup = BeautifulSoup(response.content)
    print soup.find(text="Foreign:").find_parent("td").find_next_sibling("td").get_text(strip = True)

问题是,我可以将这个数量打印到控制台,但我不能将这些值附加到列表或将它们写入csv文件。对于我需要访问此站点的先前数据,我获得了每部电影的单独信息,并将它们全部附加到一个列表中,然后将其导出到csv文件。

如何将这个“外国总收入”金额作为每部电影的单独金额?我需要更改哪些内容?

第二个问题与获取每部电影的演员/女演员列表有关。我有这个功能:

def getActors(item_url):
    source_code = requests.get(item_url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text)
    tempActors = []
    print soup.find(text="Actors:").find_parent("tr").text[7:]

这列出了一系列演员:Jennifer LawrenceJosh HutchersonLiam HemsworthElizabeth BanksStanley TucciWoody HarrelsonPhilip Seymour HoffmanJeffrey WrightJena MaloneAmanda PlummerSam ClaflinDonald SutherlandLenny Kravitz    - 就这样。

我也遇到与外国总金额相同的问题。 我希望单独获取每个角色,然后将它们全部附加到临时列表中,然后将该列表附加到所有电影的另一个完整列表中。我使用导演列表执行了此操作,但是由于所有的导演都是链接,但不是所有的演员/女演员都有html链接,我不能这样做。现在的另一个问题是每个演员之间没有空间。

为什么我当前的功能不起作用,我该如何修复它们?

更多Code ::

def spider(max_pages):
page = 1
while page <= max_pages:
    url = 'http://www.boxofficemojo.com/yearly/chart/?page=' + str(page) + '&view=releasedate&view2=domestic&yr=2013&p=.htm'
    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text)
    for link in soup.select('td > b > font > a[href^=/movies/?]'):
        href = 'http://www.boxofficemojo.com' + link.get('href')
        details(href)

        listOfForeign.append(getForeign(href))

        listOfDirectors.append(getDirectors(href))
        str(listOfDirectors).replace('[','').replace(']','')

        getActors(href)

        title = link.string
        listOfTitles.append(title)
    page 

listOfForeign = []

def getForeign(item_url):
    s = urlopen(item_url).read()
    soup = BeautifulSoup(s)
    return soup.find(text="Foreign:").find_parent("td").find_next_sibling("td").get_text(strip = True)

def spider(max_pages):
    page = 1
    while page <= max_pages:
        url = 'http://www.boxofficemojo.com/yearly/chart/?page=' + str(page) + '&view=releasedate&view2=domestic&yr=2013&p=.htm'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text)
        for link in soup.select('td > b > font > a[href^=/movies/?]'):
            href = 'http://www.boxofficemojo.com' + link.get('href')
            listOfForeign.append(getForeign(href))                
    page += 1


print listOfForeign

返回

追踪(最近一次通话):   文件“C:/Users/younjin/PycharmProjects/untitled/movies.py”,第75行,in     蜘蛛(1)   文件“C:/Users/younjin/PycharmProjects/untitled/movies.py”,第29行,蜘蛛     listOfForeign.append(getForeign(HREF))   getForeign中的文件“C:/Users/younjin/PycharmProjects/untitled/movies.py”,第73行     return soup.find(text =“Foreign:”)。find_parent(“td”)。find_next_sibling(“td”)。get_text(strip = True) AttributeError:'NoneType'对象没有属性'find_parent'

0 个答案:

没有答案