热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python3[爬虫基础入门实战]爬取豆瓣电影排行top250

先来张爬取结果的截图再来份代码吧#encodingutf8importrequestsimportrefrombs4importBeautifulSo

先来张爬取结果的截图

爬取豆瓣结果

再来份代码吧

# encoding=utf8
import requests
import re
from bs4 import BeautifulSoup
from tkinter import scrolledtext # 导入滚动文本框的模块

from tkinter import ttk
import tkinter as tk

import threading


# 获取网页内容
def getHtml(ID):
url = 'https://movie.douban.com/top250?start=%s&filter=' % ID
print('url ' + url)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
,
'COOKIE': 'bid=I0klBiKF3nQ; ll="118277"; gr_user_id=ffdf2f63-ec37-49b5-99e8-0e0d28741172; ap=1; _vwo_uuid_v2=8C5B24903B1D1D3886FE478B91C5DE97|7eac18658e7fecbbf3798b88cfcf6113; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1498305874%2C%22https%3A%2F%2Fbook.douban.com%2Ftag%2F%25E9%259A%258F%25E7%25AC%2594%3Fstart%3D20%26type%3DT%22%5D; _pk_id.100001.4cf6=4e61f4192b9486a8.1485672092.5.1498306809.1498235389.; _pk_ses.100001.4cf6=*'

}
req = requests.get(url, headers)
return req.text


# 解析网页并且获取相应内容
def parseHtml(html):
# soup = BeautifulSoup(html,'lxml') # 现在改为用正则
print('init html.....')
# print(html)

# 1 取出title
# titleRe = r'(.*?)'
titleRe = r'(.[^&]*?)' # 这里除去了副标题,(根据  空格号进行筛选)
regTitle = re.compile(titleRe)
titleStr = re.findall(regTitle, html)
# print(titleStr)
# for verTitle in titleStr:
# print(verTitle)


# 2 取出评分
retStars = r'.*?"v:average">(.*?)'
regStars = re.compile(retStars)
starts = re.findall(regStars, html)
# print(starts)

# 取出评价
regCommend = r'(.*?)'
regCommends = re.compile(regCommend)
commends = []
commends = re.findall(regCommends, html)
# print(commends)
commends.remove('·')
commends.remove('更多')
commends.remove('{{= year}}')
commends.remove('{{= sub_title}}')
commends.remove('{{= address}}')
commends.remove('集数未知')
commends.remove('共{{= episode}}集')
# print(commends)

# 取出导演,剧情(未实现)
# regDoc= r'.*?

(.*?)
'
# regxDoc = re.compile(regDoc)
# list_doc = re.findall(regxDoc,html)
# print(list_doc)
# print('*'*40)

# 片言(未实现)
# regAction = r'

.*?
(.*?)

'

# regx_action = re.compile(regAction)
# list_action = re.findall(regx_action,html)
# print(list_action)

# 取出引言 希望让人自由
regScrip = r'.*?"inq">(.*?)'
regx_scrip = re.compile(regScrip)
list_scrip = re.findall(regx_scrip, html)
# print(list_scrip)

# 取出图片地址(未实现)
# regImg = r'
.*?src= "(.*?)"'
# regx_img = re.compile(regImg)
# list_imgaddress = re.findall(regx_img,html)
# print(list_imgaddress)

ver_info = list(zip(titleStr, commends, list_scrip))
return ver_info


# html = getHtml(0)
# ver_infos = parseHtml(html)
# print(ver_infos)


def write():
print('开始爬取内容')
ID = 0
nums = 0
while ID <250:
html = getHtml(ID)
ver_infos = parseHtml(html)
ID += 25
for ver in ver_infos:
varStr = 'No.%d\t%-30s%s\t(描述:)%-30s' % (nums, ver[0], ver[1],ver[2])
print(varStr)
nums += 1
print('爬取成功'+str(nums))
def start():
print('start init ....')
t1 = threading.Thread(target=write())
t1.start()

start()
# 以下方法丢弃
# def save():
# print('save init ...')
# cOntent= name.get()
# textFile = open(u'C:\\豆瓣电影排行250.txt')
# textFile.write(content)
# textFile.close()
#
# print('^'*40)
# win = tk.Tk()
# win.title('呵呵呵')
#
# # 滚动文本框
# scrolW = 30 # 设置文本框的长度
# scrolH = 3 # 设置文本框的高度
# scr = scrolledtext.ScrolledText(win, hljs-comment"># scr.grid(column=0, columnspan=3)
#
# # 文本框
# name = tk.StringVar() # StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符;不过一般用在按钮button上。改变StringVar,按钮上的文字也随之改变。
# nameEntered = ttk.Entry(win, hljs-comment"># nameEntered.grid(column=0, row=4) # 设置其在界面中出现的位置 column代表列 row 代表行
# nameEntered.focus() # 当程序运行时,光标默认会出现在该文本框中
#
# # 添加开始按钮
# start = ttk.Button(win,text='开始',command=start())
# start.grid(column=0,row=0) #按钮的添加位置
#
# # 保存按钮
# save = ttk.Button(win,text='保存',command=save())
# save.grid(column=1,row=0)
#
# win.mainloop()


这次用的是正则来获取内容的,有两个字段在正则上卡住了, 问了群里也没有人回,就暂且写到这吧。 还是获取的静态html的页面。

遇到的知识点:

  1. 正则的简单写法:例如 regCommend = r'(.*?)'
  # 取出引言 希望让人自由
regScrip = r'.*?"inq">(.*?)'
  1. 集合的去掉不要的元素:
    commends.remove('·')
commends.remove('更多')
commends.remove('{{= year}}')
commends.remove('{{= sub_title}}')
commends.remove('{{= address}}')
commends.remove('集数未知')
commends.remove('共{{= episode}}集')
  1. 整理成一条信息:
 ver_info = list(zip(titleStr, commends, list_scrip))
  1. 用了一个线程爬取,我也不知道这是单线程爬取,反正是第一次加入吧。
    t1 = threading.Thread(target=write())
t1.start()
  1. 今天晚上用的最多的时间是GUI方面

过程:

本来数据在正则那稍微花了点时间,但是在GUI方面花的却是很长时间,搞的自己蒙圈了。在这里应该给自己提一个醒,东西一次性不要学太多,一个一个慢慢的学 虽然 一次性学的东西不会很多,但是学的印象会深刻很多。所以,归总一下,这次学的算是上面的几点吧,主要是现在是敢要正则这玩意了, 虽然用的很浅,但是,现在是对python3 不那么陌生。之前是一个都搞不出来。现在是稍微有点 入门的感觉,离自己想要的还有很长很长的路啊。。

总结:

下次练习,我也暂时不知道做什么,这些例子都是从网上给照过来的, 然后自己稍微跟着自己的感觉走一下,网上找的例子也不知道是2.x 还是3.x的,结果到后来才发现, 是2.x 的, 只是感觉蛋疼。无语。今晚虽然花的时间比较多,但是效果还是挺不错的。好好学习,加把劲。

喜欢的可以给我点个赞,让我知道你也因为你的梦想路过这里。


推荐阅读
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Python爬虫数据导出至CSV及图片存储技术详解
    Python爬虫数据导出至CSV及图片存储技术详解 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
author-avatar
手机用户2602906305_849
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有