合并 xpath 生成的列表,Python,lxml
Merging xpath generated lists, Python, lxml
我目前正在为一些数据抓取 xml 文件,我需要帮助合并 3 个列表和从 3 个 xpath 调用生成的值。:
代码:
import urllib.request
import lxml.etree as ET
opener = urllib.request.build_opener()
tree = ET.parse(opener.open('https://nordfront.se/feed'))
我感兴趣的数据:
>>> tree.xpath("/rss/channel/item/title/text()")
['Klistermärkesuppsättning i Trollhättan', 'Dror Feiler vill inte betala sina böter – spelar judekortet', 'Gruppvåldtäkt: Media döljer att afrikaner är gärningsmän — kallar dem ”svenskar”', 'Nordfronts läsare: Gyllene grynings valresultat var en framgång', 'Karikatyrtävling över ”förintelsen” i Iran', 'Nytt födelseformulär: Är mamman som fött barn kvinna eller man?', 'Kampsportsträning i Stockholm', 'Nytt projekt för nationella kvinnor!', 'Svenskt företag opererar in mikrochip i anställda', 'Utbildning i Göteborg']
>>> tree.xpath("/rss/channel/item/link/text()")
['https://www.nordfront.se/klistermarkesuppsattning-trollhattan.smr', 'https://www.nordfront.se/dror-feiler-vill-inte-betala-sina-boter-spelar-judekortet.smr', 'https://www.nordfront.se/gruppvaldtakt-svenskar-sager-media-afrikaner-sager-vittnen.smr', 'https://www.nordfront.se/veckans-fraga-var-gyllene-grynings-valresultat-en-framgang.smr', 'https://www.nordfront.se/karikatyrtavling-forintelsen-iran.smr', 'https://www.nordfront.se/nytt-fodelseformular-ar-mamman-som-fott-barn-kvinna-eller-man.smr', 'https://www.nordfront.se/kampsportstraning-stockholm-15.smr', 'https://www.nordfront.se/nytt-projekt-nationella-kvinnor.smr', 'https://www.nordfront.se/svenskt-foretag-opererar-in-mikrochip-i-anstallda.smr', 'https://www.nordfront.se/utbildning-goteborg.smr']
>>> tree.xpath("/rss/channel/item/pubDate/text()")
['Mon, 02 Feb 2015 14:00:37 +0000', 'Mon, 02 Feb 2015 13:25:07 +0000', 'Mon, 02 Feb 2015 12:45:27 +0000', 'Mon, 02 Feb 2015 09:30:38 +0000', 'Sun, 01 Feb 2015 21:15:11 +0000', 'Sun, 01 Feb 2015 19:40:12 +0000', 'Sun, 01 Feb 2015 19:30:13 +0000', 'Sun, 01 Feb 2015 19:00:31 +0000', 'Sun, 01 Feb 2015 15:30:08 +0000', 'Sun, 01 Feb 2015 15:00:20 +0000']
现在是构建数据的时候了,这样我就可以将数据放入数据库中,xml 文件中的每个 item 将代表数据库中的一列。 我的问题是我目前有来自每个 item 的信息被分成 3 个不同的 lists.
我希望你能帮助我如何以一种好的方式将这些列表合并在一起,例如:
Items Object => "item[0]" => "title" => "Title 1 text ..." "link" => "http://www...." "pubDate" => "Mon, 02 Feb 2015 14:00:37" "item[1]" => "title" => "Title 2 text ..." "link" => "http://www...." "pubDate" => "Mon, 02 Feb 2015 14:00:38" ..
如果有人可以演示我将如何实现这一点,我将非常高兴。
使用 zip
,你将得到一个元组列表(如果你使用 Python 3.x,则得到一个迭代器):
records = zip(
tree.xpath("/rss/channel/item/title/text()"),
tree.xpath("/rss/channel/item/link/text()"),
tree.xpath("/rss/channel/item/pubDate/text()")
)
# records => [
# ('Klistermärkesuppsättning i Trollhättan',
# 'https://www.nordfront.se/klistermarkesuppsattning-trollhattan.smr',
# 'Mon, 02 Feb 2015 14:00:37 +0000'),
# ('Dror Feiler vill inte betala sina böter – spelar judekortet',
# 'https://www.nordfront.se/dror-feiler-vill-inte-betala-sina-boter-spelar-judekortet.smr',
# 'Mon, 02 Feb 2015 12:45:27 +0000'),
# ....
# ]
我目前正在为一些数据抓取 xml 文件,我需要帮助合并 3 个列表和从 3 个 xpath 调用生成的值。:
代码:
import urllib.request
import lxml.etree as ET
opener = urllib.request.build_opener()
tree = ET.parse(opener.open('https://nordfront.se/feed'))
我感兴趣的数据:
>>> tree.xpath("/rss/channel/item/title/text()")
['Klistermärkesuppsättning i Trollhättan', 'Dror Feiler vill inte betala sina böter – spelar judekortet', 'Gruppvåldtäkt: Media döljer att afrikaner är gärningsmän — kallar dem ”svenskar”', 'Nordfronts läsare: Gyllene grynings valresultat var en framgång', 'Karikatyrtävling över ”förintelsen” i Iran', 'Nytt födelseformulär: Är mamman som fött barn kvinna eller man?', 'Kampsportsträning i Stockholm', 'Nytt projekt för nationella kvinnor!', 'Svenskt företag opererar in mikrochip i anställda', 'Utbildning i Göteborg']
>>> tree.xpath("/rss/channel/item/link/text()")
['https://www.nordfront.se/klistermarkesuppsattning-trollhattan.smr', 'https://www.nordfront.se/dror-feiler-vill-inte-betala-sina-boter-spelar-judekortet.smr', 'https://www.nordfront.se/gruppvaldtakt-svenskar-sager-media-afrikaner-sager-vittnen.smr', 'https://www.nordfront.se/veckans-fraga-var-gyllene-grynings-valresultat-en-framgang.smr', 'https://www.nordfront.se/karikatyrtavling-forintelsen-iran.smr', 'https://www.nordfront.se/nytt-fodelseformular-ar-mamman-som-fott-barn-kvinna-eller-man.smr', 'https://www.nordfront.se/kampsportstraning-stockholm-15.smr', 'https://www.nordfront.se/nytt-projekt-nationella-kvinnor.smr', 'https://www.nordfront.se/svenskt-foretag-opererar-in-mikrochip-i-anstallda.smr', 'https://www.nordfront.se/utbildning-goteborg.smr']
>>> tree.xpath("/rss/channel/item/pubDate/text()")
['Mon, 02 Feb 2015 14:00:37 +0000', 'Mon, 02 Feb 2015 13:25:07 +0000', 'Mon, 02 Feb 2015 12:45:27 +0000', 'Mon, 02 Feb 2015 09:30:38 +0000', 'Sun, 01 Feb 2015 21:15:11 +0000', 'Sun, 01 Feb 2015 19:40:12 +0000', 'Sun, 01 Feb 2015 19:30:13 +0000', 'Sun, 01 Feb 2015 19:00:31 +0000', 'Sun, 01 Feb 2015 15:30:08 +0000', 'Sun, 01 Feb 2015 15:00:20 +0000']
现在是构建数据的时候了,这样我就可以将数据放入数据库中,xml 文件中的每个 item 将代表数据库中的一列。 我的问题是我目前有来自每个 item 的信息被分成 3 个不同的 lists.
我希望你能帮助我如何以一种好的方式将这些列表合并在一起,例如:
Items Object => "item[0]" => "title" => "Title 1 text ..." "link" => "http://www...." "pubDate" => "Mon, 02 Feb 2015 14:00:37" "item[1]" => "title" => "Title 2 text ..." "link" => "http://www...." "pubDate" => "Mon, 02 Feb 2015 14:00:38" ..
如果有人可以演示我将如何实现这一点,我将非常高兴。
使用 zip
,你将得到一个元组列表(如果你使用 Python 3.x,则得到一个迭代器):
records = zip(
tree.xpath("/rss/channel/item/title/text()"),
tree.xpath("/rss/channel/item/link/text()"),
tree.xpath("/rss/channel/item/pubDate/text()")
)
# records => [
# ('Klistermärkesuppsättning i Trollhättan',
# 'https://www.nordfront.se/klistermarkesuppsattning-trollhattan.smr',
# 'Mon, 02 Feb 2015 14:00:37 +0000'),
# ('Dror Feiler vill inte betala sina böter – spelar judekortet',
# 'https://www.nordfront.se/dror-feiler-vill-inte-betala-sina-boter-spelar-judekortet.smr',
# 'Mon, 02 Feb 2015 12:45:27 +0000'),
# ....
# ]