前言:

本文非常浅显易懂,可以说是零基础也可快速掌握。如有疑问,欢迎留言,笔者会第一时间回复。本文代码存于github

一、爬虫的重要性:

如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,一直循环下去,直到把整个网站所有的网页都抓取完为止。

这里要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

摘取部分网友的回复: 1、之前在北京买房,谁想房价开始疯长,链家的房价等数据分析只给了一小部分,远远不能满足自己的需求。于是晚上花了几个小时的时间写了个爬虫,爬下了北京所有的小区信息及北京所有小区的所有历史成交记录。

2、我的爱人是某网络公司的销售,需要收集各种企业信息然后打电话联系。于是乎利用采集脚本抓一坨一坨的资料给她用,而她的同事天天自己搜资料整理到半夜。

二、实践:爬取电影天堂电影详情页

1、网页分析及爬取第一页的详情页url

from lxml import etree

import requests

url = 'http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html'

headers = {

'User_Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

}

response = requests.get(url,headers=headers)

# response.text 是系统自己默认判断。但很遗憾判断错误,导致乱码出现。我们可以采取另外方式 response.content。自己指定格式解码

# print(response.text)

# print(response.content.decode('gbk'))

print(response.content.decode(encoding="gbk", errors="ignore"))

复制代码

先以第一页为例,打印数据如下:

分析电影天堂 html 源代码,可以得出每个 table 标签就是一个电影

通过 xpath 拿到每个电影的详情url

html = etree.HTML(text)

detail_urls = html.xpath("//table[@class='tbspan']//a/@href")

for detail_url in detail_urls:

print(detail_url) #加上域名即为详情 url

复制代码

结果如下:

2、整理代码并爬取前7页的电影列表url

from lxml import etree

import requests

# 域名

BASE_DOMAIN = 'http://www.ygdy8.net'

# url = 'http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html'

HEADERS = {

'User_Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',

}

def spider():

base_url = 'http://www.ygdy8.net/html/gndy/dyzz/list_23_{}.html'

for x in range(1,8):

url = base_url.format(x)

print(url) # 求出每一页电影列表的url eg: http://www.ygdy8.net/html/gndy/dyzz/list_23_1.html

if __name__ == '__main__':

spider()

复制代码

3、爬取每一部电影的详情页地址

def get_detail_urls(url):

response = requests.get(url, headers=HEADERS)

# response.text 是系统自己默认判断。但很遗憾判断错误,导致乱码出现。我们可以采取另外方式 response.content。自己指定格式解码

# print(response.text)

# print(response.content.decode('gbk'))

# print(response.content.decode(encoding="gbk", errors="ignore"))

text = response.content.decode(encoding="gbk", errors="ignore")

# 通过 xpath 拿到每个电影的详情url

html = etree.HTML(text)

detail_urls = html.xpath("//table[@class='tbspan']//a/@href")

detail_urls = map(lambda url:BASE_DOMAIN+url,detail_urls) #这句意思相当于下面一段代码:替换列表中的每一个url

# def abc(url):

# return BASE_DOMAIN+url

# index = 1

# for detail_url in detail_urls:

# detail_url = abc(detail_url)

# detail_urls[index] = detail_url

# index+1

return detail_urls

复制代码

4、抓取电影详情页的数据

# 解析详情页面

def parse_detail_page(url):

movie = {}

response = requests.get(url,headers = HEADERS)

text = response.content.decode('gbk', errors='ignore')

html = etree.HTML(text)

# title = html.xpath("//div[@class='title_all']//font[@color='#07519a']") # 本行47行,下面已修改

# 打印出 [, ]

# print(title)

# 为了显示,我们需要转一下编码

# for x in title:

# print(etree.tostring(x,encoding='utf-8').decode('utf-8'))

# 我们是为了取得文字,所以修改47行

title = html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0]

movie['title'] = title

zoomE = html.xpath("//div[@id='Zoom']") [0] # 求出共同的顶级容器,方便后面求职

imgs = zoomE.xpath(".//img/@src") # 求出海报和截图

cover = imgs[0]

if len(imgs) > 1:

screenshot = imgs[1]

movie['screenshot'] = screenshot

# print(cover)

movie['cover'] = cover

infos = zoomE.xpath(".//text()")

for index,info in enumerate(infos):

if info.startswith('◎年  代'):

info = info.replace("◎年  代", "").strip() # strip 去掉空格

movie['year'] = info

elif info.startswith("◎产  地"):

info = info.replace("◎产  地", "").strip()

movie["country"] = info

elif info.startswith("◎类  别"):

info = info.replace("◎类  别", "").strip()

movie["category"] = info

elif info.startswith("◎豆瓣评分"):

info = info.replace("◎豆瓣评分", "").strip()

movie["douban_rating"] = info

elif info.startswith("◎片  长"):

info = info.replace("◎片  长","").strip()

movie["duration"] = info

elif info.startswith("◎导  演"):

info = info.replace("◎导  演", "").strip()

movie["director"] = info

elif info.startswith("◎主  演"):

actors = []

actor = info.replace("◎主  演", "").strip()

actors.append(actor)

# 因为主演有很多个,再加上其在电影天堂中元素的特殊性,需要遍历一遍,在分别求出每一个演员

for x in range(index+1,len(infos)): # 从演员 infos 开始遍历,求出每一个演员

actor = infos[x].strip()

if actor.startswith("◎"): # 也就是到了标签 的 ◎ 就退出

break

actors.append(actor)

movie['actor'] = actors

elif info.startswith('◎简  介 '):

# info = info.replace('◎简  介 ',"").strip()

for x in range(index+1,len(infos)):

if infos[x].startswith("◎获奖情况"):

break

profile = infos[x].strip()

movie['profile'] = profile

# print(movie)

elif info.startswith('◎获奖情况 '):

awards = []

# info = info.replace("◎获奖情况 ", "").strip()

for x in range(index+1,len(infos)):

if infos[x].startswith("【下载地址】"):

break

award = infos[x].strip()

awards.append(award)

movie['awards'] = awards

# print(awards)

download_url = html.xpath("//td[@bgcolor='#fdfddf']/a/@href")[0]

movie['download_url'] = download_url

return movie

复制代码

上述代码爬取了电影的每一个数据。为了让读者方便对照格式,笔者已经下载了写此篇文章时的html—— "movie.html",放于github 中

最后结果:

总结注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

python爬虫新手项目-Python爬虫实战之取电影天堂,,新手练手项目相关推荐

  1. python爬虫框架之Scrapy之分页爬取电影天堂

    首先创建项目 进入项目文件夹下用cmd scrapy startproject dytt 打开项目创建app scrapy genspider dy dytt8.net 修改settings.py U ...

  2. 爬虫(9)实战爬取电影天堂的1000+最新电影

    文章来因: 客官们,久等了,在家上网课,上的无聊,想看个电影放松一下,但是却不知道看啥电影,想起最近学习的爬虫,于是找电影天堂爬个电影信息,不就知道看那个电影了,上菜 菜单 文章来因: 实战内容:直接 ...

  3. python爬电影天堂_python爬虫爬取电影天堂电影

    python爬虫爬取电影天堂电影?本项目实现一个简单的爬虫,通过requests和BeautifulSoup爬取电影天堂电影信息,包括片名.年代.产地.类别.语言.海报链接和视频链接等内容.pytho ...

  4. 10个不到500行代码的超牛Python 练手项目

    10个不到500行代码的超牛Python 练手项目 图:内容概览.注:本文内容由实验楼搜集.整理自Github,实际项目版权归原作者所有. 以下10个练手项目均摘录自一本尚未出版的 Python 神书 ...

  5. [C++练手项目] DocAnalysis

    [C++练手项目] DocAnalysis 文章目录 [C++练手项目] DocAnalysis 任务分析 编码 转换DOC文件到TXT 分词 停止词 两文档相同和不同字符数统计 总体实现思路 一.分 ...

  6. python新手项目-Python 的练手项目有哪些值得推荐?

    其实初学者大多和题主类似都会经历这样一个阶段,当一门语言基础语法学完,之后刷了不少题,接下来就开始了一段迷茫期,不知道能用已经学到的东西做些什么即便有项目也无从下手,而且不清楚该如何去提高技术水平. ...

  7. python可以做什么项目-适合Python 新手的5大练手项目,你练了么?

    已经学习了一段时间的Python,如果你看过之前W3Cschool的文章,就知道是时候该进去[项目]阶段了. 但是在练手项目的选择上,还存在疑问?不知道要从哪种项目先下手? W3Cschool首先有两 ...

  8. python新手项目-推荐:一个适合于Python新手的入门练手项目

    原标题:推荐:一个适合于Python新手的入门练手项目 随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人 ...

  9. python新手练习项目_适合Python 新手的5大练手项目,你练了么?

    已经学习了一段时间的Python,如果你看过之前W3Cschool的文章,就知道是时候该进去[项目]阶段了. 但是在练手项目的选择上,还存在疑问?不知道要从哪种项目先下手? W3Cschool首先有两 ...

最新文章

  1. Django框架使用
  2. lagrange插值(完成)
  3. 使用Epoll 在 Linux 上开发高性能应用服务器
  4. 被动声呐 相移波束形成_100天计划-DAY9-拖曳声呐
  5. 调用gensim库训练word2vec词向量
  6. Cheatsheet: 2011 09.13 ~ 09.19
  7. 2012年中国系统架构师大会 即将开幕
  8. 基于FPGA ZC706的AD9371ADRV9009网口驱动配置
  9. java导出dbf文件_Java 导出dbf文件
  10. BeagleBone Black 移植U-Boot (2 MLO、U-Boot)
  11. 【JY】如何利用python来编写GUI?
  12. Aizu1367 Rearranging a Sequence 模拟|签到
  13. 《WEB安全渗透测试》(23):记一次利用SSRF漏洞到提权
  14. GB/T 20272-2006与GB/T 20008-2005
  15. 温度传感器DS18B20的使用
  16. Java成员方法getinfo_成员方法
  17. 智慧高校共享单车管理系统
  18. 神州泰岳王宁:从高校团委书记到中关村富豪
  19. Mangos脚本例子2
  20. [转载] Motorola——手机USB驱动程序v4.9.0(用于windows)

热门文章

  1. (转载)TL-WN725N V3无线网卡驱动移植与wireless工具wpa_supplicant-2.6
  2. SUSE glibc升级为2.18过程记录
  3. dns tunnel CC
  4. 一种神经元探索系统方法及装置
  5. python 的进程池不可嵌套
  6. 学习webpack记录(一)
  7. Codeforces791:Ordinary Numbers题解
  8. java--String与int相互转换
  9. 2019春第一次课程设计实验报告
  10. cdqz2017-test10-加帕里图书馆(区间DP 简单容斥)