大家好,我是皮皮。
一、前言
前几天在Python黄金交流群有个叫【IRONIC】的粉丝问了一个Python网络爬虫的问题,这里拿出来给大家分享下,一起学习下。
他的代码如下:
代码语言:javascript复制import requests
from bs4 import BeautifulSoup
#获取相应数据
url = 'https://movie.douban.com/top250'
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.3161 SLBChan/11'
}
r = requests.get(url,headers=headers)
#解析数据
#BeautifulSoup(名称.text(以文本的形式存入),'html.parser'Python内置库)
soup = BeautifulSoup(r.text,'html.parser')
ranks = soup.find_all('em',class_='')
titles = soup.find_all('span',class_='title')
bds = soup.find_all('p',class_='')
rates = soup.find_all('span',class_='rating_num')
quotes = soup.find_all('span',class_='inq')
#通过循环取出
for i in range(25):
print(ranks[i].text,
titles[2*i].text,
bds[i].text,
rates[i].text,
quotes[i].text)
可以看到Python抓取豆瓣电影的名称,前两个还正常,到后面,成了英文原名了。
二、解决过程
这个问题倒不是很难,原始网页中的源代码长这样。
那么可以看到那个title
有两个,一个中文,一个英文。【月神】这里给了一个更好的思路。
这里给出了具体的代码,一气呵成。
代码语言:javascript复制import requests
from bs4 import BeautifulSoup
#获取相应数据
url = 'https://movie.douban.com/top250'
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.3161 SLBChan/11'
}
r = requests.get(url,headers=headers)
#解析数据
#BeautifulSoup(名称.text(以文本的形式存入),'html.parser'Python内置库)
soup = BeautifulSoup(r.text,'html.parser')
movie_ranks = []
lis = soup.find_all('li', class_=None)
for li in lis:
if li.find_all('em', class_=''):
ranks = li.find('em', class_='').text
titles = li.find('span',class_='title').text
bds = li.find('p',class_='').text
rates = li.find('span',class_='rating_num').text
quotes = li.find('span',class_='inq').text
print(ranks, titles, bds, rates, quotes)
这样的话,理解起来就简单很多了。【月神】代码运行之后的结果,如下图所示,可以看到电影名称都出来了。
完美地帮助粉丝解决了问题。
三、总结
大家好,我是皮皮。这篇文章主要分享了Python抓取豆瓣电影的名称,前两个还正常,到后面成了英文原名的问题,针对该问题给出了具体的解析和代码演示,帮助粉丝顺利解决了问题。
最后感谢粉丝【IRONIC】提问,感谢【月神】、【格格物 এ คิดถึง】给出的具体解析和代码演示,感谢【dcpeng】等人参与学习交流。