首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3抓取html数据

Python 3抓取html数据
EN

Stack Overflow用户
提问于 2016-05-31 18:23:56
回答 1查看 248关注 0票数 0

我计划从以下网站html链接中提取数据:http://movie.walkerplus.com/list/2015/12/

html的某些部分如下所示:

代码语言:javascript
复制
<dl class="directorList">
<dt>監督</dt>
<dd>
<a href="/person/209306/" title="">スティーヴ・マーティノ</a>
</dd>
</dl>
<dl class="roleList">
<dt>出演キャスト</dt>
<dd>
<a href="/person/226530/" title="">鈴木福</a>
<a href="/person/228506/" title="">芦田愛菜</a>
<a href="/person/266939/" title="">小林星蘭</a>
</dd>

我想获取这个站点中所有的directionList数据和出演キャス

例如スティーヴ·マーティノ,鈴木福芦田愛菜小林星蘭

我的代码如下所示:

代码语言:javascript
复制
from bs4 import BeautifulSoup
from urllib.request import urlopen

html = urlopen("http://movie.walkerplus.com/list/2015/12/")
bsObj_movie = BeautifulSoup(html, "html.parser")
print(bsObj_movie)
movie_title = bsObj_movie.findAll({"h3"})
movie_description = bsObj_movie.findAll("p", {"class": "clearboth"})
movie_directors = bsObj_movie.findAll("dl", {"class": "directorList"})
movie_roles = bsObj_movie.findAll("dl", {"class": "roleList"})
for description in movie_description:
  print(description.get_text())
for title in movie_title:
  print(title.get_text())
for director in movie_directors:
 print(director.find('a').get_text())
for role in movie_roles:
  print(role.get_text())

我已经成功获取了movie_title和movie_description,但movie_directors和movie_roles如下所示。

監督

セルゲイ·ボドロフ

出演キャスト

鈴木福芦田愛菜小林星蘭

实际上,我只想提取以下数据,不包括:監督和出演キャスト.And我想打印标题,描述,导演和角色,而不仅仅是导演和角色。此外,我希望提取这些数据并将其存储到一个数据库中,该数据库有一个表,其中包含四列:标题、描述、导演和角色。

セルゲイ·ボドロフ

鈴木福芦田愛菜小林星蘭

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-05-31 19:19:33

并不是第一页上的每一部电影(即The Royal Opera House Cinema Season 2015/16 Royal Opera "The Marriage of Figaro" )都有导演,所以我将其过滤掉:

代码语言:javascript
复制
from bs4 import BeautifulSoup
from urllib.request import urlopen

html = urlopen("http://movie.walkerplus.com/list/2015/12/")
soup  = BeautifulSoup(html, "html.parser")

data = soup.select("div.movie dl.directorList")

for  d in data:
    title = d.select_one("a").text
    description = d.find_previous("p", "clearboth").text
    cast = ",".join([a.text.strip() for a in d.find_next("dl","roleList").select("dd a")])
    director = d.dd.a.text
    print(title, director, cast, description)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37543091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档