一篇文章教会你利用Python网络爬虫实现豆瓣电影采集

【一、项目背景】

豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务。可以记录想看、在看和看过的电影电视剧 、顺便打分、写影评。极大地方便了人们的生活。

今天以电视剧(美剧)为例,批量爬取对应的电影,写入csv文档 。用户可以通过评分,更好的选择自己想要的电影。

 

【二、项目目标】

获取对应的电影名称,评分,详情链接,下载 电影的图片,保存文档。

 

【三、涉及的库和网站】

1、网址如下:

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}

2、涉及的库:requests****、fake_useragent、json****、csv

3、软件:PyCharm

 

【四、项目分析】

1、如何多网页请求?

点击下一页时,每增加一页paged自增加20,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

2、如何获取真正请求的地址?

请求数据时,发现页面上并没有对应数据。其实豆瓣网采用javascript动态加载内容,防止采集。

1)F12右键检查,找到Network,左边菜单Name , 找到第五个数据,点击Preview。

2)点开subjects,可以看到 title 就是对应电影名称。rate就是对应评分。通过js解析subjects字典,找到需要的字段。

  1. 如何网页访问?
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=20

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=40

https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=60

当点击下一页时,每增加一页page自增加20,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

 

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。导入需要的库和请求网址。

import requests,json
from fake_useragent import UserAgent
import csv

class  Doban(object):
    def __init__(self):
      self.url = "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"

    def main(self):
        pass

if __name__ == '__main__':
    Siper = Doban()
    Siper.main()

2、随机产生UserAgent,构造请求头,防止反爬。

for i in range(1, 50):
            self.headers = {
                'User-Agent': ua.random,
            }

3、发送请求 ,获取响应,页面回调,方便下次请求。

    def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)
        html = res.content.decode("utf-8")
        return html

4、json解析页面数据,获取对应的字典。

   data = json.loads(html)['subjects']
    # print(data[0])

5、for遍历,获取对应的电影名、 评分、下详情页链接。

      print(name, goblin_herf)
      html2 = self.get_page(goblin_herf)  # 第二个发生请求
      parse_html2 = etree.HTML(html2)
      r = parse_html2.xpath('//div[@class="entry"]/p/text()')

6、创建csv文件进行写入,定义对应的标题头内容,保存数据 。

    # 创建csv文件进行写入
    csv_file = open('scr.csv', 'a', encoding='gbk')
    csv_writer = csv.writer(csv_file)
    # 写入csv标题头内容
    csv_writerr.writerow(['电影', '评分', "详情页"])
    #写入数据
    csv_writer.writerow([id, rate, urll])

7、图片地址进行请求。定义图片名称,保存文档。

    html2 = requests.get(url=urll, headers=self.headers).content
    dirname = "./图/" + id + ".jpg"
    with open(dirname, 'wb') as f:
        f.write(html2)
        print("%s 【下载成功!!!!】" % id)

8、调用方法,实现功能。

   html = self.get_page(url)
   self.parse_page(html)

9、项目优化:

1)设置时间延时。

 time.sleep(1.4)

2)定义一个变量u, for遍历,表示爬取的是第几页。(更清晰可观)。

 u = 0
 self.u += 1;

 

【六、效果展示】

1、点击绿色小三角运行输入起始页,终止页( 从0页开始 )。

2、将下载成功信息显示在控制台。

3、保存csv文档。

4、电影图片展示。

 

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文章就Python爬取豆瓣网,在应用中出现的难点和重点,以及如何防止反爬,做出了相对于的解决方案。

3、希望通过这个项目,能够帮助了解json解析页面的基本流程,字符串是如何拼接,format函数如何运用。

4、本文基于Python网络爬虫,利用爬虫库,实现豆瓣电影及其图片的获取。实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、需要本文源码的小伙伴,后台回复“豆瓣电影”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————-

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫获取穷游攻略

【一、项目背景】

穷游网提供原创实用的出境游旅行指南、攻略,旅行社区和问答交流平台,以及智能的旅行规划解决方案,同时提供签证、保险、机票、酒店预订、租车等在线增值服务。穷游“鼓励和帮助中国旅行者以自己的视角和方式体验世界”。

今天教大家获取穷游网的城市信息,使用Python将数据写入csv文档。

一篇文章教会你利用Python网络爬虫获取穷游攻略

 

【二、项目目标】

实现将获取对应的城市、图片链接、热点、批量下载 保存csv文档。

 

【三、涉及的库和网站】

1、网址如下:

https://place.qyer.com/south-korea/citylist-0-0-{}

2、涉及的库:requestsl****xml、fake_useragent、time、csv

 

【四、项目分析】

首先需要解决如何对下一页的网址进行请求的问题。可以点击下一页的按钮,观察到网站的变化分别如下所示:

https://place.qyer.com/south-korea/citylist-0-0-1
https://place.qyer.com/south-korea/citylist-0-0-2
https://place.qyer.com/south-korea/citylist-0-0-3

观察到只有citylist-0-0-{}/变化,变化的部分用{}代替,再用for循环遍历这网址,实现多个网址请求。

 

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。准备url地址。

import requests,os
from lxml import etree
import randomimport timefrom fake_useragent import UserAgent
class Travel(object):    def __init__(self):
        self.url = "https://place.qyer.com/south-korea/citylist-0-0-{}/"
    def main(self):
        passif __name__ == '__main__':
    spider= Travel()    spider.main()

2、随机产生UserAgent。

      self.film_list = []
      ua = UserAgent(verify_ssl=False)
        for i in range(1, 50):
            self.film_list.append(ua.chrome)
            self.Hostreferer = {
            'User-Agent': random.choice(self.film_list)
        }

3、多页请求。

        startPage = int(input("起始页:"))
        endPage = int(input("终止页:"))
        for page in range(startPage, endPage + 1):
            url = self.url.format(page)

4、定义get_page方法,进行数据请求。

  '''数据请求'''
    def get_page(self, url):
        html = requests.get(url=url, headers=self.Hostreferer).content.decode("utf-8")
        self.page_page(html)        # print(html)//网页
        # print(self.headers)//构造头

5、定义page_page,xpath解析数据, for循环遍历数组。

在谷歌浏览器上,右键选择开发者工具或者按F12。右键检查,xpath找到对应信息的字段。如下图所示。

一篇文章教会你利用Python网络爬虫获取穷游攻略
   parse_html = etree.HTML(html)
    image_src_list = parse_html.xpath('//ul[@class="plcCitylist"]/li') 
    for i in image_src_list:            b = i.xpath('.//h3//a/text()')[0].strip()
            c = i.xpath('.//p[@class="beento"]//text()')[0].strip()
            d = i.xpath('.//p[@class="pics"]//img//@src')[0].strip()

6、定义csv文件保存数据,写入文档。

       # 创建csv文件进行写入
        csv_file = open('scrape.csv', 'a', encoding='gbk')
        csv_writer = csv.writer(csv_file)        csv_writer.writerow([b, c, d])        csv_file.close()

7、在main方法调用。

   def main(self):
        for i1 in range(1, 25):
            url = self.url.format(i1)
            # print(url)
            html = self.get_page(url)
            time.sleep(2)
            print("第%d页" % i1)

8、time模块,设置时间延迟。

           time.sleep(2)

 

【六、效果展示】

1、点击运行,输入起始页,终止页。

一篇文章教会你利用Python网络爬虫获取穷游攻略

2、将下载成功信息显示在控制台。

一篇文章教会你利用Python网络爬虫获取穷游攻略

3、保存csv文档。

一篇文章教会你利用Python网络爬虫获取穷游攻略

 

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、希望通过这个项目,能够帮助大家对csv文档处理有进一步的了解。

3、本文基于Python网络爬虫,利用爬虫库,实现穷游网的获取。实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

4、可以根据自己的需要选择自己的喜欢的城市获取自己想要的有效信息 。

5、需要本文源码的小伙伴,后台回复“穷游攻略”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————

往期精彩文章推荐:

一篇文章教会你使用html+css3制作炫酷效果

【一、项目背景】

在浏览一些网站的时候,经常会看到很多的炫酷的效果去装饰页面,使它看起来更高端大气一些。比如,艺龙就采用了图片上加载文字,点击图片使把对应的图片放大,使用户清晰,直观的看到内容。这种效果该怎么做呢?

今天教大家用简单的html+css3结合制作艺龙的页面效果。

 

【二、项目准备】

1、图片:新建img文件,准备自己喜欢的五张图,保存在文件夹。

2、软件:Dreamweaver

 

【三、项目目标】

运行时:图片显示缩略图。文字显示在上面。

点击时:把对应的图片显示并放大,点击文字有详细的介绍。

 

【四、项目实现】

1、创建div 存放图片和文件,添加class属性。

<body>
<div  class="show">
<div class="wap">
  <div class="box" >
    <img src="images/img1.jpg">
    <span class='ba'>
  </div>
  <div class="box">
    <img src="images/img2.jpg">
    <span class='ba'></span>
    
  </div>
  <div class="box">
    <img src="images/img3.jpg">
    <span class='ba'></span>
  </div>
  <div class="box">
    <img src="images/img4.jpg">
    <span class='ba'></span>
  </div>
  <div class="box">
    <img src="images/img5.jpg">
    <span class='ba'></span>
  </div>
  </div>
</div>
</body>

2、添加文字。

<span class='ba'>功夫熊猫</span>
<span class='ba'>飞屋环游记</span>
<span class='ba'>汽车总动员</span>
<span class='ba'>玩具总动员</span>
<span class='ba'>机器人</span>

3、添加CSS样式

1)设置body的背景颜色为灰色。

body
  {
    background: #ccc;
  }

2)设置box的宽,边框,边框阴影,加载动画过渡效果。

.box{
    float: left;
    width: 160px;
    transition: all 0.5s;
    border: 1px solid #fff; #边框
    box-shadow: -5px 0px 10px 0px #000; #阴影
    position: relative;
  }

3)添加外层div 样式。添加overflow属性,防止内容溢出。

.wap{
    width: 999999999px;
    overflow: hidden;
  }
  .show{
    width: 800px;
    height: 320px;
    overflow: hidden;
    margin: 200px auto;
    box-shadow: 5px 5px 10px 4px #000;
  }

4、文字样式。

设置高,宽,行高设置跟高一样, 文字才能居中显示。设置文字背景颜色,大小。

.ba{
       width: 640px;
       height: 50px;
       line-height: 50px;
    color: #fff;
    background: rgba(0,0,0,0.5);
        bottom: 0;
        left: 0;
    position: absolute;
    text-indent: 2em;    
  }

5、添加鼠标移上去的效果样式。

 .ba:hover{    
       height: 320px;
       transition: all 0.5s;
  }
  .show:hover .box{
    width: 40px;

  }
    
  .show .box:hover{
    width: 640px;

  }

6、添加详细介绍文字。(text文件自取)。

 

【五、效果展示】

1、点击F12运行到浏览器。

2、点击图片放大。

3、点击文字,详细介绍。

 

【六、总结】

1、本项目,就鼠标点击事件遇到的一些难点进行了分析及提供解决方案。

2、html+css也可以做出网站页面的效果,在上面显示图片标题的地方不能用绝对定位,于是用的relative定位,这个地方是布局的核心部分,否则无法将文字放在图片之上。

3、按照操作步骤,自己尝试去做。自己实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

4、需要本文源码的小伙伴,后台回复“炫酷效果”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫获取素材图片

【一、项目背景】

在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存下来,慢慢挑选合适的图片。

 

【二、项目目标】

1、根据给定的网址获取网页源代码。

2、利用正则表达式把源代码中的图片地址过滤出来。

3、过滤出来的图片地址下载素材图片。

 

【三、涉及的库和网站】

1、网址如下:

https://www.51miz.com/

2、涉及的库:requestslxml

 

【四、项目分析】

首先需要解决如何对下一页的网址进行请求的问题。可以点击下一页的按钮,观察到网站的变化分别如下所示:

https://www.51miz.com/so-sucai/1789243.html
https://www.51miz.com/so-sucai/1789243/p_2/
https://www.51miz.com/so-sucai/1789243/p_3/

我们可以发现图片页数是1789243/p{},p{}花括号数字表示图片哪一页。

 

【五、项目实施】

1、打开觅知网,在搜索中输入你想要的图片素材(以鼠年素材图片为例)。

2、根据上一步对网址的分析,首先我们定义一个类叫做ImageSpider,类里面定义初始化函数、发送请求获取响应数据函数、解析函数、主函数。首先初始化函数,准备url地址和headers,代码如下图所示。

3、发送请求获取响应数据函数。

4、解析数据,使用xpath获取二级页面链接,最后把图片存储在文件夹中。使用谷歌浏览器选择开发者工具或直接按F12,发现我们需要的图片src是在img标签下的,于是用Python的requests提取该组件。

5、主函数,代码如下图所示。

 

【六、效果展示】

1、运行程序,在控制台输入你要爬取的页数,如下图所示。

2、在本地可以看到效果图,如下图所示。

 

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、希望通过这个项目,能够帮助大家下载到素材图片。

3、本文基于Python网络爬虫,利用爬虫库,实现素材图片的获取。实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

4、需要本文源码的小伙伴,后台回复“素材图片”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

【公众号】IT共享之家

入群请在微信后台回复【入群】

—————— End ——————

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫获取Mikan动漫资源

【一、项目背景】

[蜜柑计划 – Mikan Project] :新一代的动漫下载站。是一个专门为喜欢动漫的小伙伴们打造的动漫视频在线播放网站,为大家第一时间分享最新动漫资源,每日精选最优质的动漫推荐。

 

【二、项目目标】

实现获取动漫种子链接,并下载保存在文档。

 

【三、涉及的库和网站】

1、网址如下:

https://mikanani.me/Home/Classic/{}

2、涉及的库:reques****ts、****lxml、****fake_useragent

3、软件:PyCharm

 

【四、项目分析】

首先需要解决如何对下一页的网址进行请求的问题。可以点击下一页的按钮,观察到网站的变化分别如下所示:

https://mikanani.me/Home/Classic/1

https://mikanani.me/Home/Classic/2

https://mikanani.me/Home/Classic/3

点击下一页时,每增加一页Classic/()自增加1,用{}代替变换的变量,再用for循环遍历这网址,实现多个网址请求。

 

【五、反爬措施】

1、获取正常的 http请求头,并在requests请求时设置这些常规的http请求头。

2、使用 fake_useragent ,产生随机的UserAgent进行访问。

 

【六、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。导入需要的库和网址。

import requests
from lxml import etree
from fake_useragent import UserAgent

class  Mikan(object):
    def __init__(self):
      self.url = "https://mikanani.me/Home/Classic/{}"

    def main(self):
        pass

if __name__ == '__main__':
    Siper = Mikan()
    Siper.main()

2、主方法(main):for循环实现多个网页请求。

stat = int(input("start :"))
end = int(input(" end:"))
for page in range(stat, end + 1):
    url = self.url.format(page)
    print(url)

3、 随机产生UserAgent。

for i in range(1, 50):
            self.headers = {
                'User-Agent': ua.random,
            }

4、发送请求 获取响应, 页面回调,方便下次请求。

def get_page(self, url):
    res = requests.get(url=url, headers=self.headers)
    html = res.content.decode("utf-8")
    return html

5、xpath解析一级页面数据,for循环遍历补全网址,获取二级页面网址。

parse_html = etree.HTML(html)
one = parse_html.xpath('//tbody//tr//td[3]/a/@href')
for li in one:
    yr = "https://mikanani.me" + li

6、二级页面请求 ,先找到页面父节点,for循环遍历,再用path获取到种子的下载地址。补全种子链接地址。

tow = parse_html2.xpath('//body')
for i in tow:
    four = i.xpath('.//p[@class="episode-title"]//text()')[0].strip()
    fif = i.xpath('.//div[@class="leftbar-nav"]/a[1]/@href')[0].strip()
    # print(four)
    t = "https://mikanani.me" + fif
    print(t)

7、保存在word文档 。

 dirname = "./种子/" + four[:15] + four[-20:] + '.torrent'
  # print(dirname)
  html3 = requests.get(url=t, headers=self.headers).content
  with open(dirname, 'wb') as f:
      f.write(html3)
      print("\n%s下载成功" % four)

8、调用方法,实现功能。

 html = self.get_page(url)
 self.parse_page(html)

 

【七、效果展示】

1、运行程序,在控制台输入起始页,终止页,如下图所示。

2、将下载成功的图片信息显示在控制台,如下图所示。

3、保存.torrent文档。

4、如何打开种子文件?先上传到百度云盘,如下图所示。

5、双击解析下载,如下图所示。

 

【八、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文章就python爬取Mikan Project,在下载种子的难点和重点,以及如何防止反爬,做出了相对于的解决方案。

3、介绍了如何去拼接字符串,以及列表如何进行类型的转换。

4、欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、Mikan Project还提供了星期的专栏。每一天都可以看到好看的动漫。专门为喜欢动漫的小伙伴们打造的动漫视频。

6、需要本文源码的小伙伴,后台回复“动漫资源”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————

往期精彩文章推荐:

一篇文章教会你利用createjs实现界面效果

【一、项目背景】

createjs是一个基于canvas的制作H5游戏、动画、交互的库。包括EaselJs、TweenJs、SoundJs、 PreloadJs四个部分。它基于容器进行展示,其中根容器是stage(舞台)对象。

今天教大家用EaselJs、TweenJs结合做一个游戏说明界面。

 

【二、项目准备】

1、去网站:

http://www.createjs.cc/

下载EaselJs、TweenJs这两个模块。

 

【三、需要的工具】

Adobe Dreamweaver

 

【四、项目目标】

运行到浏览器,弹框从上往下滑到指定位置,点击红色按钮,跳转4399游戏界面。

 

【五、项目分析】

1、创建画布canvas。创建一个div,用h3表示标题,P标签加载内容用a标签做按钮,如图:

 

【六、项目实现】

1、导入EaselJs、TweenJs模块。

<script src="js/easeljs-0.7.1.min.js"></script>
<script src="js/tweenjs.min.js"></script>

body 创建画布canvas 设置画布大小,画布添加描边 ,id属性。

<canvas id="canvas" width="500" height="400" style="border: 1px solid#050000" ></canvas>

2、创建div 设置对应的标签,内容,按钮模块。设置div的id属性。

<div id="instrutions" style="width: 400px; height: 300px;border: 1px dashed #00d0ff;text-align: center; visibility: hidden">
        <h3>游戏说明</h3>
      <p><b>点击</b><span style="color: red;"a>红色</span>按钮</p>
        <p >Make sure you click them <span style="text-decoration: underline;">all</span>before time runs out!</p>
        <p>Rack up <i>as many points </i>as you can to reach the <span style=a"color: #0c61ff">BULE</span>level.</p><a style="background-color:#f00;">开始游戏</a>
        <h2 style="font-weight: bold; margin-top: 30px;">
    GOOD LUCK!</h2>

3、js加载,实现动画效果。

 window.onload=function () {
            var  stage=new createjs.Stage(canvas);
            var d=new createjs.DOMElement("instrutions");
            d.alpha=0;
            d.x=50;
            createjs.Tween.get(d).wait(100).to({y:40,alpha:1},2000,createjs.MotionGuidePlugin.bounceIn);

            stage.addChild(d);
        createjs.Ticker.addEventListener("tick",stage);
        }

代码解析:

1)表示页面已加载就要执行的函数。

window.onload=function ()

2)创建一个名为canvas的舞台(stage)**

var stage=new createjs.Stage(canvas) 

3)找到div的对应的id属性,设置它的不透明度为0,(刚开始不可见)初始化x坐标。

var d=new createjs.DOMElement("instrutions");
            d.alpha=0;
            d.x=50;

4)get()表示你要改变的对象,括号内输入id值。wait()表示你要延迟显示的时间,to()表示你要让它做什么事情,(这里给它到y坐标为40,并且把它的不透明度为1 ) ,MotionGuidePlugin.bounceIn:表示让它从上往下掉。**

createjs.Tween.get(d).wait(100).to({y:40,alpha:1},2000,createjs.MotionGuidePlugin.bounceIn);

5)组件添加到舞台(stage),createjs.Ticker.addEventListener(“tick”,stage);表示刷新舞台。**

stage.addChild(d);
createjs.Ticker.addEventListener("tick",stage); 

 

【六、效果展示】

1、F12运行到chrome浏览器,div块从上往下掉落。

2、点红色按钮跳转页面。

 

【七、总结】

1、本文主要介绍了createjs中EaselJs、TweenJs的用法,以及对stage是如何创建的,stage上 页面的动画效果。在页面上如何去呈现stage。以及页面是如何的跳转。js如何调用实现功能。

2、就本项目中的难点,重点,提供了详细的讲解和提供有效的解决方案。

3、大家可以尝试了解createjs的其他模块,官网上有对应的API文档供大家学习。

4、按照操作步骤,自己尝试去做。自己实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、如果需要本文源码,请在公众号后台回复“动画效果”四个字获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————

往期精彩文章推荐:

 

一篇文章教会你用Python多线程获取小米应用商店App

【一、项目背景】

小米应用商店给用户发现最好的安卓应用和游戏,安全可靠,可是要下载东西要一个一个的搜索太麻烦了。而已速度不是很快。

今天用多线程爬取小米应用商店的游戏模块。快速获取。

 

【二、项目目标】

目标 :应用分类 – 聊天社交 应用名称, 应用链接,显示在控制台供用户下载。

 

【三、涉及的库和网站】

1、网址:百度搜 – 小米应用商店,进入官网。

2、涉及的库:reques****ts、threading 、queue 、json、time

3、软件:PyCharm

 

【四、项目分析】

1、确认是否为动态加载。

通过页面局部刷新, 右键查看网页源代码,搜索关键字未搜到 。断定此网站为动态加载网站,需要抓取网络数据包分析。

2、使用chrome浏览器,F12抓取网络数据包。

1)抓取返回json数据的URL地址(Headers中的Request URL)。

http://app.mi.com/categotyAllListApi?page={}&categoryId=2&pageSize=30

2)查看并分析查询参数(headers中的Query String Parameters)。

page: 1
categoryId: 2
pageSize: 30

发现只有page再变,0 1 2 3 … … ,这样我们就可以通过控制page的直拼接多个返回json数据的URL地址。

 

【五、项目实施】

1、我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。准备导入库,url地址和请求头headers。

import requests
from threading import Thread
from queue import Queue
import json
import time
class  XiaomiSpider(object):
    def __init__(self):
      self.headers = {'User-Agent':'Mozilla/5.0'}
      self.url = 'http://app.mi.com/categotyAllListApi?page={}&categoryId=15&pageSize=30'
    def main(self):
        pass
if __name__ == '__main__':
    imageSpider =  XiaomiSpider()
    imageSpider.main()

2、定义队列,用来存放URL地址

self.url_queue = Queue()

3、URL入队列

def url_in(self):
    # 拼接多个URL地址,然后put()到队列中
    for i in range(67):
        self.url.format((str(i)))
        self.url_queue.put(self.url)

4、定义线程事件函数get_page(请求数据)

def get_page(self):
    # 先get()URL地址,发请求
    while True:
        # 当队列不为空时,获取url地址
        if not self.url_queue.empty():
            url = self.url_queue.get()
            html = requests.get(url,headers=self.headers).text
            self.parse_page(html)
        else:
            break

5、定义函数parse_page 解析json模块,提取应用名称,应用链接内容。

 # 解析函数
def parse_page(self,html):
    app_json = json.loads(html)
    for app in app_json['data']:
        # 应用名称
        name = app['displayName']
        # 应用链接
        link = 'http://app.mi.com/details?id={}'.format(app['packageName'])
        d = { '名称' : name,'链接' : link }
        print(d)

6、main方法, 定义t_list = [] 存放所有线程的列表。调用get_page多线程爬取。

def main(self):
    self.url_in()
    # 存放所有线程的列表
    t_list = []

    for i in range(10):
        t = Thread(target=self.get_page)
        t.start()
        t_list.append(t)

7、for循环遍历列表,统一回收线程。

# 统一回收线程
for p in t_list:
    p.join()

8、统计一下执行时间。

start = time.time()
spider = XiaomiSpider()
spider.main()
end = time.time()
print('执行时间:%.2f' % (end-start))

 

【六、效果展示】

1、运行程序。点击运行,将游戏名称,下载链接,执行时间,显示在控制台。

2、点击蓝色的网址可以直接去到下载页面下载应用,如下图所示。

 

【七、总结】

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、Python多线程优点。使用线程可以把占据长时间的程序中的任务放到后台去处,程序的运行速度可能加快。

3、单线程可以被抢占(中断),而已多线程就有了更多的选择。而已在其他线程正在运行时,线程可以暂时搁置(也称为睡眠)。可以释放一些珍贵的资源如内存占用。

4、大家也可以尝试在爬取其他分类,按照操作步骤,自己尝试去做。自己实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、需要本文源码的小伙伴,后台回复“小米应用”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

往期精彩文章推荐:

一篇文章教会你创建vue项目和使用vue.js实现数据增删改查

【一、项目背景】

在管理员的一些后台页面里,数据列表中都会对这些数据进行增删改查的操作,例如管理员添加商品、修改商品价格、删除商品、查询商品,我们应该关注这些数据的操作和处理。

 

【二、项目目标】

主要有以下5个目标:

1、如何创建vue项目。

2、数据添加方法:获取到id和name在data上面获取,组织一个对象,把对象通过数组的相关方法,添加到当前data的自定义的一个数组,在VM使用Model数据操作。

3、数据删除方法:根据id找到要删除这一项的索引值,找到后调用数组的splice方法。

4、数据修改方法:根据Id找到修改这一项的索引值,找到索引值后数据就会更改。

5、数据查询方法:在ES6中,为字符串提供了一个新方法:

String.prototype.includes('要包含的字符串')

如果包含,则返回 true ,否则返回 false。

 

【三、效果展示】

先上结果显示图后,小编就开始教你如何写这个项目。

 

【四、创建vue项目】

下面介绍如何创建vue的项目。

1)打开cmd命令步骤:第一步点击开始菜单,找到“运行”,点击进去,也可以直接通过“win+R”打开运行,

2)第二步进去运行之后,在运行输入框里面输入“cmd”,

3)第三步点击确定,就进去命令提示符了。

4)安装npm(npm全称为 Node Package Manager是一个基于Node.js的包管理器,也是整个Node.js社区最流行、支持的第三方模块最多的包管理器)。

npm -v

5)npm安装如下图所示:

6)由于网络原因安装cnpm

 npm install -g cnpm --registry=https://registry.npm.taobao.org

7)安装vue-cli

cnpm install -g @vue/cli

8)安装webpack

cnpm install -g webpack<br>
webpack是JavaScript打包器(module bundler

9)安装完之后开始创建项目。输入vue ui如下图所示:

10)输入之后会弹出一网页如下图

11)点击vue项目管理器;

12)点击在此创建新项目;

13)输入项目名(我的项目名是test)后点击下一步;

14)创建项目完成。

15)创建项目加载需要一定时间,加载完后再使用命令行进到这个项目输入npm install 后再运行这个项目输入命令cnpm run serve如下图:

16)最后根据Local或Network输入到网址中;

以上就是创建vue项目,接下我们开始写这个添加、删除、修改、查询数据商品代码。

 

【五、界面的布局】

这个项目我们用到boostrap.css文件,怎么引入这个boostrap的包呢?

1)打开cmd命令再这个项目输入npm install bootsrtap;

2)在style样式内写入这行代码:

@import "~bootstrap/dist/css/bootstrap.min.css"

3)写页面需要用到的组件布局:

4)在v-for 中的数据,直接从 data 上的list中直接渲染过来的,我们自定义了一个 search 方法,同时,把所有的关键字,通过传参的形式,传递给了 search方法,在 search 方法内部,通过for 循环,把所有符合 搜索关键字的数据,保存到 一个新数组中,返回。

5)接下在data定义id、name、keywords、list。

 

【六、数据添加方法】

1、获取到id 和name,在data 上面获取。

2、组织出一个对象,把这个对象调用数组的相关方法,添加到当前data 上的 list 中。

3、在Vue.js中已经实现了数据双向绑定,每当我们修改了data中的数据后,监听到数据改名,自动把最新数据显示在页面。

4、在进行VM中的Model数据操作,同时,在操作Model数据的时候,指定的业务逻辑操作。

5、代码如下图:

 

【七、数据删除方法】

1、如何根据Id,找到要删除这一项的索引值。

2、当找到索引了就调用数组的 splice方法。

3、代码如下图:

 

【八、数据修改方法】

1、定义一个在data自定义一个数组用来保存修改后的数据edit:[];

2、在方法里面定义对象,根据Id,找到修改这一项的索引值,找到索引值后数据就会更改。

3、代码如下图:

 

【九、数据查询方法】

1、forEach 、some 、filter 、findIndex这些都属于数组的新方法,都会对数组中的每一项,进行遍历,执行相关的操作。

2、在ES6中,为字符串提供了一个新方法,String.prototype.includes(‘要包含的字符串’),如果包含,则返回 true ,否则返回 false。

3、代码如下图:

 

【十、总结】

1、创建vue项目使用cmd命令安装npm、cnpm、vue-cli、webpack,输入vue ui开始创建vue项目。

2、删除方法,可以使用索引,为每一行设置一个id属性值,然后删除总数据id属性值的那个项。

3、操作Model数据的时候,指定的业务逻辑操作。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

往期精彩文章推荐:

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】

现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。

我们可以通过 jquery mobile去设计颜色的拾取器,得到我们想要的颜色值。同时可以验证RGB表的颜色值。

 

【二、项目准备】

框架:jquery mobile

软件:Dreamweaver

1、去官网 jQuerymobile.com 下载jquery mobile。

2、在你的网页中添加 jQuery Mobile

你可以通过以下几种方式将jQuery Mobile添加到你的网页中:

  • 从 CDN 中加载 jQuery Mobile (推荐)。
  • 从jQuerymobile.com 下载 jQuery Mobile库。

3、导入jQuery Mobile

<link href="jquery.mobile/jquery.mobile-1.4.5.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="jquery.mobile/jquery-1.12.2.min.js"></script>
<script type="text/javascript" src="jquery.mobile/jquery.mobile-1.4.5.js"></script>

 

【三、项目目标】

1、滑动滑块将对应的颜色显示在页面。

2、实现输入框,输入对应的RBG值,将结果显示在页面上。

 

【四、项目实现】

1、创建三层div块。(头部,中部,尾部)。

<body>
<div data-role="page" ">
    <div data-role="header">
        <h1>拾色器</h1>
    </div>
    <div data-role="content" class="color"> </div>
    <div data-role="footer" data-position="fixed">
       
    </div>
</div>
</body>

头部显示文字,中部颜色显示区域,尾部显示滑动条。

2、创建一个表单(用三个input来分别存放RGB这三种颜色)。

<form>
     <input name="red" id="red" min="0" max="255" value="0" type="range" " />
     <input name="green" id="green" min="0" max="255" value="0" type="range"" />
     <input name="blue" id="blue" min="0" max="255" value="0" type="range"  />
</form>

3、添加CSS样式

<style type="text/css">
.color {
    height: 100%;
    min-height: 400px;
}
</style>

4、添加 JS

1) 定义(set_color()方法)获取相对于颜色的id属性。

<script>
function set_color(){
    var red = $("#red").val();        //获取红色数值
    var green = $("#green").val();        //获取绿色数值
    var blue =$("#blue").val();        //获取蓝色数值
}
</script>

2)生成rgb表示的颜色字符串。

var color = "RGB("+red+","+green+","+blue+")";  //生成rgb表示的颜色字符串

3)设计内容框背景色。

$(".color").css("background-color",color);       //设计内容框背景色

5、调用set_color()。

<input name="red" id="red" min="0" max="255" value="0" type="range" onchange="set_color();" />
<input name="green" id="green" min="0" max="255" value="0" type="range" onchange="set_color();" />
<input name="blue" id="blue" min="0" max="255" value="0" type="range" onchange="set_color();" />

 

【五、效果展示】

1、点击运行。

2、点击f12进入开发者模式,点击蓝色框框切换手机模式运行。

3、滑动任意一条滑动条。得到想要的颜色。

4、手动输入RGB(0-255)值,得到相对应的颜色,如下图所示。

 

【六、总结】

1、使更多的人去了解jQuery Mobile, jQuery可以快速找到文档中的html元素,并对其进行操作,如隐藏、显示、改变样式…”。

2、本项目主要学习了input标签(类型:滑动条)如何与js绑定,获取事件响应。

3、颜色拾取器项目中,随机产生颜色这个难点进行了有效的分析,并提供解决方案。

4、按照操作步骤,自己尝试去做。自己实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

5、需要本文源码的小伙伴,后台回复“颜色拾取”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

—————— End ——————

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口

【一、项目背景】

有道翻译作为国内最大的翻译软件之一,用户量巨大。在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选。今天教大家如何去获取有道翻译手机版的翻译接口。

一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口

 

【二、项目目标】

多国语言的翻译,可以翻译词语或者句子。

 

【三、涉及的库和网站】

1、网址如下:

http://m.youdao.com/translate

2、涉及的库:requestslxml

3、软件:PyCharm

 

【四、项目分析】

1、点击F12,点击蓝色窗口切换成手机模式,运行进入开发者模式,点击network,找到headers下面的form Data。

2、输翻译的词语点击翻译按钮,可以看到这里有两个参数,一个是inputtext(输入的词语),一个是type(代表语种)。

3、构架一个表单传入这两个参数,通过改变参数的类型,从而 实现多国的翻译。

4、通过返回的页面进行xpath解析数据。

一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口

 

【五、项目实施】

1、导入需要库,创建一个名为YoudaoSpider的类,定义一个初始化方法init。

import requests
from lxml import etree
class YoudaoSpider(object):
    def __init__(self):{
       
        }

if __name__ == '__main__':
    spider = YoudaoSpider()

2、准备url地址,请求头headers。

'''准备url地址'''
        self.trans_url="http://m.youdao.com/translate"
        '''请求头'''
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"

3、定义get_result方法,传入两个参数,构架表单。

def get_result(self, word, fro):
        '''构造一个form表单数据---表单是一个字典'''
        data = {
            'inputtext': word,
            'type': fro

        }

4、发送请求, 获取响应,遍历得到的结果。

response = requests.post(url=self.trans_url, data=data, headers=self.headers)

html = response.content.decode('utf-8')
pa = etree.HTML(html)
# print(html)
pa_list = pa.xpath("//div[@class='generate']/ul/li/text()")
for i in pa_list:
    print("翻译为:" + i)

5、判断输入的语种类型,调用get_result方法。

点击切换语种就可以看得到各国的type类型。例如(中译韩):

一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口
choice = input("1.中翻译英语  2.中翻韩语 3.把中文翻译法语 \n请选择1/2/3:\n")
if choice == '1':
    fro = 'ZH_CN2EN'
elif choice == '2':
    fro = 'ZH_CN2SP'

elif choice == '3':
    fro = 'ZH_CN2FR'

word = input("请输入你要翻译的单词或句子:")
result = spider.get_result(word, fro)

 

【六、效果展示】

1、输入你要翻译的类型。

一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口

2、输入你要翻译的句子。

一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口

 

【七、总结】

1、本文基于Python网络爬虫,利用爬虫库,获取有道翻译的接口。

2、请求接口时构架表单问题进行了详细的讲解。并提供了解决方案。

3、大家可以尝试的去翻译其他的语言,能够更好的理解爬虫的原理。

4、自己尝试一下,你会发现你也可以 (世上无难事,只怕有心人)。

5、需要本文源码的小伙伴,后台回复“有道词典”四个字,即可获取。

****看完本文有收获?请转发分享给更多的人****

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐: