小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
每天一小步,成功一大步。大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习每天小知识。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要讲解使用Python爬虫实战爬取豆瓣电影和排名TOP250
所用到的库
requests库和beautifulsoup4库。
如果想要详细了解,欢迎点击传送门直达,这里就不在缀述。
具体实现
主要思想:
- 获取需要解析的网页
- 解析网页
- 获取需要的标签和标签内容
- 将获取的内容保存到文件中
- 根据所需格式打印文件中的内容
import bs4
import requests
from bs4 import BeautifulSoup
//打印文件中的内容
def print_movie_250():
f = open("E:/1.txt")
fm = "{0:^10}\t{1:{3}^25}\t{2:^10}"
//中文按照中文字符占位chr(12288),避免排版紊乱
print(fm.format("排名", "电影名称", "评分", chr(12288)))
for line in f:
l = line.split(",")
print(fm.format(l[0], l[1], l[2], chr(12288)))
//获取需要解析的url,然会response的text
def getHTMLText(url):
try:
//设置header模拟真实用户
r = requests.get(url, headers={"user-agent": "Mozilla/5.0"})
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except NameError:
print(NameError)
def parseHTMLText(html):
soup = BeautifulSoup(html, "html.parser")
titles = []
ids = []
scores = []
//需要的内容都再ol中
for li in soup.find("ol").children:
em = li.find("em")//获取排名
if isinstance(em, bs4.element.Tag):
ids.append(em.string)
span = li.find("span")
if isinstance(span, bs4.element.Tag):
titles.append(span.string)//获取电影名称
score = soup.find_all("span", class_="rating_num")
for s in score://获取电影评分
scores.append(s.string)
//写入文件
f = open("E:/1.txt", "a")
for i in range(25):
f.write(ids[i]+","+titles[i]+","+scores[i]+"\n")
f.close()
def main():
//获取前250名电影的url
for i in range(10):
url = "https://movie.douban.com/top250?start="
page = i*25
url = url + str(page) +"&filter="
html = getHTMLText(url)
parseHTMLText(html)
print_movie_250()
main()
结语
以上就是python爬虫的一个小实例,希望能对读者有所帮助。如有不正之处,欢迎掘友们批评指正。