python爬虫学习(2):输入电影名获得电影信息

输入电影名获得电影信息

  • 获得含有电影信息的网址链接
  • 爬取电影简介
    • .string与.text
    • .string的一些抓取问题
  • 完整代码
    • 关于` if __name__ == '__main__'`
    • 完整代码

在上一篇博文:python爬虫学习(1):使用bs4爬豆瓣电影信息 的代码基础上做出以下改动:1.输入电影名获得含有电影信息的网址链接;2.爬取简介

获得含有电影信息的网址链接

代码如下:

def search_url():
n_url=input()
s_url=‘https://www.douban.com/search?q=’+n_url
s_data=requests.get(s_url).text
s_soup=BeautifulSoup(s_data,‘html.parser’)
url_div=s_soup.find(class_=“result”)
url_soup=url_div.find(‘a’)
url=url_soup.get(‘href’)
return url

学习过程中,电影搜索网站的网址使用s_url='https://movie.douban.com/subject_search?search_text=' +n_url+ '&cat=1002'会出错,查看网页源代码发现没有电影信息的链接(猜测与重定向有关),因此改为s_url='https://www.douban.com/search?q='+n_url'

爬取电影简介

sum_soup=soup.find(property=“v:summary”)
print(sum_soup.string)

打印结果为none,改为sum_soup.text后,打印出简介。下面简单了解.string与.text。

.string与.text

参考 https://www.crifan.com/python_beautifulsoup_string_vs_text/

beautifulsoup中,对外接口,没有提供text这个属性,只有string这个属性值;
beautifulsoup内部才有text这个属性,只供内部使用 。使用text值,应该调用对应的get_text()。

.string的一些抓取问题

参考 https://segmentfault.com/q/1010000005915466/a-1020000005915727
当解决标签里内嵌标签的抓取字符串问题时,可有以下两种方式:1.extract()移除多余字符串;2.运用列表。

完整代码

关于if __name__ == '__main__'

参考 http://blog.konghy.cn/2017/04/24/python-entry-program/
if __name__ == '__main__' : 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。

完整代码

import requests
from bs4 import BeautifulSoup
#获得网页链接
def search_url():
n_url=input()
s_url=‘https://www.douban.com/search?q=’+n_url
s_data=requests.get(s_url).text
s_soup=BeautifulSoup(s_data,‘html.parser’)
url_div=s_soup.find(class_=“result”)
url_soup=url_div.find(‘a’)
url=url_soup.get(‘href’)
return url
#定位信息,查找定位
def search_info(url):
data=requests.get(url).text
soup=BeautifulSoup(data,“html.parser”)
film_soup=soup.find(property=“v:itemreviewed”)
info_soup=soup.find(id=“info”)
director_soup=info_soup.find(class_=“attrs”)
director_a=director_soup.find_all(‘a’)
time_soup=info_soup.find(property=“v:runtime”)
attr_div=soup.find(class_=“actor”)
attr_a=attr_div.find_all(‘a’)
d_name=’’
for dir_name in director_a:
d_name=d_name+dir_name.string+’,’
a_name=’’
for name in attr_a:
a_name=a_name+name.string+’,’
sum_soup=soup.find(property=“v:summary”)
sum=sum_soup.text.replace(" “,”")
all=‘网页链接:’+url+’\n’+‘电影名称:’+film_soup.string+’\n’+‘导演:’+d_name+’\n’+‘主演:’+a_name+’\n’+‘片长:’+time_soup.string+’\n’+‘简介:’+sum+’\n’
return all
if name == ‘main’:
al = ‘’
url = search_url()
al = search_info(url)
print(al)

你可能感兴趣的:(python学习)