2017-04-01 3 views
0

Ich habe ein Skript in Python 2.7, die die Tabelle in dieser Seite kratzt: http://www.the-numbers.com/movie/budgets/allExtrahieren von Text aus Link in Python

ich jede der Säulen extrahieren mag, das Problem ist, dass mein Code nicht erkennt die Spalten mit Links (2. und 3. Spalte).

budgeturl = "http://www.the-numbers.com/movie/budgets/all" 
s = urllib.urlopen(budgeturl).read() 
htmlpage = etree.HTML(s) 
htmltable = htmlpage.xpath("//td[@class='data']/text()") 

Mit diesem Code Htmltable [0] ist der Rang, Htmltable [1] Die Produktion Budget ist und weiterhin von dort weiter. Von denen, die ich vermisse, brauche ich den Text nicht den Link.

+0

Können Sie einfach den Text greifen ohne Angabe 'class = 'data''? Es sieht so aus, als hätten die anderen TDs keine Klasse. –

+0

Nicht sicher, wie es geht – MovieBall

Antwort

1

Sie benötigen eine XPath zu ändern, da nicht alle td Elemente class="data" haben. Probieren Sie diesen xpath-Ausdruck aus: //td//text().

import urllib 
from lxml import etree 

budgeturl = "http://www.the-numbers.com/movie/budgets/all" 
s = urllib.urlopen(budgeturl).read() 
htmlpage = etree.HTML(s) 
htmltable = htmlpage.xpath("//td//text()") 

Ausgang: enter image description here

1
import urllib 

budgeturl = "http://www.the-numbers.com/movie/budgets/all" 
s = urllib.urlopen(budgeturl).read() 

def find_between(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

s = find_between(s, '<table>', '</table>') 

print s[:500] 
print '.............................................................' 
print s[-250:] 

Find string between two substrings

kehrt:

>>> 
<tr><th>&nbsp;</th><th>Release Date</th><th>Movie</th><th>Production Budget</th><th>Domestic Gross</th><th>Worldwide Gross</th></tr> 
<tr><td class="data">1</td> 
<td><a href="/box-office-chart/daily/2009/12/18">12/18/2009</a></td> 
<td><b><a href="/movie/Avatar#tab=summary">Avatar</a></td> 
<td class="data">$425,000,000</td> 
<td class="data">$760,507,625</td> 
<td class="data">$2,783,918,982</td> 
<tr> 
<tr><td class="data">2</td> 
<td><a href="/box-office-chart/daily/2015/12/18">12/18/2015</a></td> 
............................................................. 
</td> 
<td><a href="/box-office-chart/daily/2005/08/05">8/5/2005</a></td> 
<td><b><a href="/movie/My-Date-With-Drew#tab=summary">My Date With Drew</a></td> 
<td class="data">$1,100</td> 
<td class="data">$181,041</td> 
<td class="data">$181,041</td> 
<tr> 

enter image description here

......................................... 

enter image description here

Ich brauche den Text nicht den Link.

über http://www.convertcsv.com/html-table-to-csv.htm

Release Date,Movie,Production Budget,Domestic Gross,Worldwide Gross 
1,12/18/2009,Avatar,"$425,000,000","$760,507,625","$2,783,918,982" 
8/5/2005,My Date With Drew,"$1,100","$181,041","$181,041" 

Sie beautifulsoup dasselbe tun können, finden Sie unter:

beautifulSoup html csv