一篇文章教会你利用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网络爬虫获取有道翻译手机版的翻译接口

 

【二、项目目标】

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

 

【三、涉及的库和网站】

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 ——————-

往期精彩文章推荐:

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

【一、项目背景】

百度贴吧是全球最大的中文交流平台,你是否跟我一样,有时候看到评论区的图片想下载呢?或者看到一段视频想进行下载呢?

今天,小编带大家通过搜索关键字来获取评论区的图片和视频。

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

【二、项目目标】

实现把贴吧获取的图片或视频保存在一个文件。

 

【三、涉及的库和网站】

1、网址如下:

https://tieba.baidu.com/f?ie=utf-8&kw=吴京&fr=search

2、涉及的库:requestslxml、****urrilb

 

【四、项目分析】

1、反爬措施的处理

前期测试时发现,该网站反爬虫处理措施很多,测试到有以下几个:

  1. 直接使用requests库,在不设置任何header的情况下,网站直接不返回数 据。
  2. 同一个ip连续访问40多次,直接封掉ip,起初我的ip就是这样被封掉的。

为了解决这两个问题,最后经过研究,使用以下方法,可以有效解决。

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

 

2、如何实现搜索关键字?

通过网址我们可以发现只需要在kw=() ,括号中输入你要搜索的内容即可。这样就可以用一个{}来替代它,后面我们在通过循环遍历它。

 

【五、项目实施】

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

import requests
from lxml import etree
from urllib import parse
class BaiduImageSpider(object):
    def __init__(self, tieba_name):
        pass
    def main(self):
        pass
if __name__ == '__main__':
    inout_word = input("请输入你要查询的信息:")

    spider.main()
        pass
if __name__ == '__main__':
    spider= ImageSpider()
    spider.main()

2、准备url地址和请求头headers 请求数据。

import requests
from lxml import etree
from urllib import parse
class BaiduImageSpider(object):
    def __init__(self, tieba_name):
          self.tieba_name = tieba_name #输入的名字
        self.url = "http://tieba.baidu.com/f?kw={}&ie=utf-8&pn=0"
        self.headers = {
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'
        }

    '''发送请求 获取响应'''
    def get_parse_page(self, url, xpath):
        html = requests.get(url=url, headers=self.headers).content.decode("utf-8")
        parse_html = etree.HTML(html)
        r_list = parse_html.xpath(xpath)
        return r_list
    def main(self):
        url = self.url.format(self.tieba_name)
if __name__ == '__main__':
    inout_word = input("请输入你要查询的信息:")
    key_word = parse.quote(inout_word)
    spider = BaiduImageSpider(key_word)
    spider.main()

3、用xpath进行数据分析

3.1、chrome_Xpath插件安装

  1. 这里用到一个插件。能够快速检验我们爬取的信息是否正确。具体安装方法如下。
  2. 百度下载chrome_Xpath_v2.0.2.crx, chrome浏览器输入:chrome://extensions/
一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频
  1. 直接将chrome_Xpath_v2.0.2.crx拖动至该扩展程序页面 ;
  2. 如果安装失败,弹框提示“无法从该网站添加应用、扩展程序和用户脚本”,遇到这个问题,解决方法 是:打开开发者模式,将crx文件(直接或后缀修改为rar)并解压成文件夹,点击开发者模式的加载已解压的扩展程序,选择解压后的文件夹,点击确定,安装成功;

3.2、chrome_Xpath插件使用

上面我们已经安装好了chrome_Xpath插件,接下来我们即将使用它。

  1. 打开浏览器,按下快捷键F12 。
  2. 选择元素,如下图所示。
一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频
  1. 右键,然后选择,“Copy XPath”,如下图所示。
一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

3.3、编写代码,获取链接函数。

上面我们已经获取到链接函数的Xpath路径,接下来定义一个获取链接函数get_tlink,并继承self,实现多页抓取。

 '''获取链接函数'''

    def get_tlink(self, url):
        xpath = '//div[@class="threadlist_lz clearfix"]/div/a/@href'
        t_list = self.get_parse_page(url, xpath)
        # print(len(t_list))
        for t in t_list:
            t_link = "http://www.tieba.com" + t
            '''接下来对帖子地址发送请求  将保存到本地'''
            self.write_image(t_link)

4、保存数据

这里定义一个write_image方法来保存数据,如下所示。

'''保存到本地函数'''

def write_image(self, t_link):
      xpath = "//div[@class='d_post_content j_d_post_content clearfix']/img[@class='BDE_Image']/@src | //div[@class='video_src_wrapper']/embed/@data-video"
        img_list = self.get_parse_page(t_link, xpath)       
        for img_link in img_list:  
            html = requests.get(url=img_link, headers=self.headers).content
            filename = "百度/"+img_link[-10:]
         
            with open(filename, 'wb') as f:
                f.write(html)
                print("%s下载成功" % filename)

注:@data-video是网址中的视频,如下图所示。

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

 

【六、效果展示】

1、点击运行,如下图所示(请输入你要查询的信息):

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

2、以吴京为例输入,回车:

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

3、将图片下载保存在一个名为“百度”文件夹下,这个文件夹需要你提前在本地新建好。务必记得提前在当前代码的同级目录下,新建一个名为“百度”的文件夹,否则的话系统将找不到该文件夹,会报找不到“百度”这个文件夹的错误。

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

4、下图中的MP4就是评论区的视频。

一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频

 

【七、总结】

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

2、本文基于Python网络爬虫,利用爬虫库,实现百度贴吧评论区爬取。就Python爬取百度贴吧的一些难点, 进行详细的讲解和提供有效的解决方案。

3、欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。学习requests 库的使用以及爬虫程序的编写。

4、通过本项目可以更快的去获取自己想要的信息。

5、需要本文源码的小伙伴,后台回复“百度贴吧”四个字,即可获取。

想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/

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

IT共享之家

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

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

往期精彩文章推荐:

一篇文章教会你用Python爬取淘宝评论数据

【一、项目简介】

    本文主要目标是采集淘宝的评价,找出客户所需要的功能。统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等。

【二、项目准备工作】

1. 准备Pycharm,下载安装等,可以参考这篇文章:Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

2. 爬取商品地址,如下所示:

https://detail.tmall.com/item.htm?spm=a230r.1.14.1.55a84b1721XG00&id=552918017887&ns=1&abbucket=17

3. 需要下载几个库,如何下载呢?

打开pycharm软件点击File在点击setting选项,再选择Project:你的文件名下边的Project:Interpreter选项。

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

点击+号,安装这个项目需要用的库,例如:requests、beautifulsoup4、simplejson。

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据
【三、项目实现】

1. 导入需要的库

import requests
from bs4 import  BeautifulSoup as bs
import json
import csv
import re

2. 需要登录淘宝网,选择谷歌浏览器选择开发者工具或按F12有个Network选项,查找list_detail_rate.htm?文件

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

定义一个变量存储URL地址PAGE_URL = []

定义一个生成链接列表函数,使用字符串拼接形成评论的页数

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

定义一个获取评论数据函数内定义需要用到的字段例如:用户名、评论时间、颜色分类、评论,如下图所示。

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据
python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

那个cookie值在在开发者工具Network有个item.htm?spm文件有个cookie复制过来就好了。

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

解析JS文件内容、将数据写入TEXT文件中,如下图所示。

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据
python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

最后定义一个主函数爬取需要的评论页数,如下图所示。

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

最后得到的结果如图所示:

python爬虫视频教程:一篇文章教会你用Python爬取淘宝评论数据

 

【四、总结】

1、本文基于Python网络爬虫,采集了淘宝商品的评价,方法行之有效。但是建议不要抓取太多,以免对服务器造成压力。

2、如果需要本文源码,请在公众号后台回复“淘宝评论”获取。

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

IT共享之家

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

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

往期精彩文章推荐:

手把手教你进行Scrapy中item类的实例化操作

接下来我们将在爬虫主体文件中对Item的值进行填充。

1、首先在爬虫主体文件中将Item模块导入进来,如下图所示。

手把手教你进行Scrapy中item类的实例化操作

2、第一步的意思是说将items.py中的ArticleItem类导入到爬虫主体文件中去,将两个文件串联起来,其中items.py的部分内容如下图所示。

手把手教你进行Scrapy中item类的实例化操作

3、将这个ArticleItem类导入之后,接下来我们就可以对这个类进行初始化,并对其进行相应值的填充。首先去parse_detail函数下对其进行实例化,实例化的方法也十分简单,如下图所示。

手把手教你进行Scrapy中item类的实例化操作

4、接下来,我们将填充对应的值。实际上我们在之前通过Xpath或者CSS选择器已经获取到了目标数据,如下图所示,现在要做的就是依次填充目标字段的值。

手把手教你进行Scrapy中item类的实例化操作

5、我们可以像字典一样来给目标字段传值,例如item[“title”]= title,其他的目标字段的填充也是形如该格式,填充完成之后如下图所示。

手把手教你进行Scrapy中item类的实例化操作

其中,目标字段可以参考items.py中定义的item,这样可以加快填充的速度。

6、到这里,我们已经将需要填充的字段全部填充完成了,之后我们需要调用yield,这点十分重要。再调用yield之后,实例化后的item就会自动传递到pipeline当中去。可以看到下图中的pipelines.py中默认给出的代码,说明pipeline其实是可以接收item的。

手把手教你进行Scrapy中item类的实例化操作

7、到这里,关于实例化item的步骤就已经完成了,是不是比较简单呢?我们后面把pipeline配置起来,一步一步的将Scrapy串起来。

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

往期精彩文章推荐:

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

Python爬虫与数据挖掘

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

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

如何在交互式环境中执行Python程序

如何在交互式环境中执行Python程序

相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行、命令行窗口运行、开发工具上运行等,其中在不同的操作平台上还互不相同。今天,小编讲些Python基础的内容,以Windows下交互式环境为依托,演示Python程序的运行。

一般来说,顺利安装Python之后,有两种方式可以进入Python交互性环境。一种是在Python自带的IDLE中直接打开交互式窗口,如下图所示:

如何在交互式环境中执行Python程序

另一种是打开开始菜单,输入cmd之后,进入命令行窗口,之后输入Python,回车之后便可以进入到交互式环境中去,如下图所示:

如何在交互式环境中执行Python程序

在>>>提示符后边输入编程语句,然后回车进行执行,就会得到运行的结果。简单来看,这个交互式环境有点类似计算器,一次执行一条语句,而且还可以保存结果。下图是部分操作实例:

如何在交互式环境中执行Python程序

需要注意的是特殊变量“_”,它在Python交互式环境中的意思是前面运算的结果,一般在程序中使用其构造成新的表达式,在此基础上做进一步计算。在交互式环境中,我们可以直接使用常量,也可以定义变量,但是必须要事先先定义好变量,不然的就会出现命名错误,如例子中的最后一行代码中的a没有定义,所以报错了,但是length和width都没有报错,因为他有定义。

在Python交互式环境中,如果存在语法错误,程序在运行之后会报错,而且会得到错误信息,可以帮助我们很轻松的找到报错的行数和报错内容,只要我们对症下药就可以药到病除啦,bug分分钟解决掉~~

在交互式环境中,输入的代码不会被保存下来,当关闭Python得到运行窗口之后,之前输入的代码将不会被保存。但是在交互式环境中按下键盘中的上下键,可以寻找历史命令,但是它是短暂性的记忆,当退出程序之后,这些命令将不复存在。

如果你需要编写较长程序的时候,使用命令行就不太方便了。此时你可以利用文本编辑器进行编辑脚本。在IDLE中点击左上方的file,然后选择New window菜单,就可以新建一个窗口了,如下图所示:

如何在交互式环境中执行Python程序

在这里,你可以编写你的代码,但是务必要注意缩进,否则会经常出现indentation(缩进)错误,语句的缩进在Python中相当重要,因为不同的缩进反映了语句块的不同层次之间的关系。编写好的文件需要进行保存(Ctrl+s),之后以.py的拓展名进行保存。保存好之后,按下快捷键F5就可以运行程序了,之后在IDLE的窗口中便可以看到运行的结果。当然你也可以右键,然后点击run,就可以运行程序了。

想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/

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

往期精彩文章推荐:

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

Python爬虫与数据挖掘

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

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

相信小伙伴们都知道今冬以来范围最广、持续时间最长、影响最重的一场低温雨雪冰冻天气过程正在进行中。预计,今天安徽、江苏、浙江、湖北、湖南等地有暴雪,局地大暴雪,新增积雪深度4~8厘米,局地可达10~20厘米。此外,贵州中东部、湖南中北部、湖北东南部、江西西北部有冻雨。言归正传,天气无时无刻都在陪伴着我们,今天小编带大家利用Python网络爬虫来实现天气情况的实时采集。

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

此次的目标网站是绿色呼吸网。绿色呼吸网站免费提供中国环境监测总站发布的PM2.5实时数据查询,更收集分析关于PM2.5有关的一切报告和科研结论,力求以绵薄之力寻同呼吸共命运的你关注PM2.5,关注大气健康!

程序实现很简单,本次选择BeautifulSoup选择器用于匹配目标信息,如:地区、时间、AQI指数、首要污染物、PM2.5浓度、温馨提示等。需要采集的页面内容如下图所示:

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

绿色呼吸网天气信息

在网页源码中,目标信息存在的位置如下图所示:

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

部分网页源码

在开发工具pycharm中进行代码实现,难点在于BS4选择器的语法。有个细节需要注意,部分城市在当天是没有污染物的,因此在网页中wuranwu这个属性没有任何显示,此时应该介入if判断语句,避免获取的数据为空导致程序报错,也可以做异常处理来解决这个问题。其中部分关键代码如下图所示:

利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

在开发工具pycharm中进行代码实现

只要我们右键点击运行,在控制台中输入我们所关注城市的汉语拼音,便可以在pycharm的控制台中可以看到该地区的实时天气信息,而且还有温馨提示,是不是很方便呢?

最近天寒地冻的,小编建议大家注意出行安全,出行优先乘坐公共交通工具,尽量少开车、不开车。

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

往期精彩文章推荐:

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

Python爬虫与数据挖掘

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

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

如何利用CSS选择器抓取京东网商品信息

前几天小编分别利用Python正则表达式BeautifulSoupXpath分别爬取了京东网商品信息,今天小编利用CSS选择器来为大家展示一下如何实现京东商品信息的精准匹配~~

如何利用CSS选择器抓取京东网商品信息

CSS选择器

目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup使用的技术书籍和博客软文并不多,而在这仅有的资料中介绍CSS选择器的少之又少。在网络爬虫的页面解析中,CCS选择器实际上是一把效率甚高的利器。虽然资料不多,但官方文档却十分详细,然而美中不足的是需要一定的基础才能看懂,而且没有小而精的演示实例。

如何利用CSS选择器抓取京东网商品信息

京东商品图

首先进入京东网,输入自己想要查询的商品,向服务器发送网页请求。在这里小编仍以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:
https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其中参数的意思就是我们输入的keyword,在本例中该参数代表“狗粮”,具体详情可以参考Python大神用正则表达式教你搞定京东商品信息。所以,只要输入keyword这个参数之后,将其进行编码,就可以获取到目标URL。之后请求网页,得到响应,尔后利用CSS选择器进行下一步的数据采集。

商品信息在京东官网上的部分网页源码如下图所示:

如何利用CSS选择器抓取京东网商品信息

部分网页源码

仔细观察源码,可以发现我们所需的目标信息在红色框框的下面,那么接下来我们就要一层一层的去获取想要的信息。

在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

如何利用CSS选择器抓取京东网商品信息

CSS选择器在线复制

很多小伙伴都觉得CSS表达式很难写,其实掌握了基本的用法也就不难了。在线复制CSS表达式如上图所示,可以很方便的复制CSS表达式。但是通过该方法得到的CSS表达式放在程序中一般不能用,而且长的没法看。所以CSS表达式一般还是要自己亲自上手。

直接上代码,利用CSS去提取目标信息,如商品的名字、链接、图片和价格,具体的代码如下图所示:

如何利用CSS选择器抓取京东网商品信息

代码实现

如果你想快速的实现功能更强大的网络爬虫,那么BeautifulSoupCSS选择器将是你必备的利器之一。BeautifulSoup整合了CSS选择器的语法和自身方便使用API。在网络爬虫的开发过程中,对于熟悉CSS选择器语法的人,使用CSS选择器是个非常方便的方法。

最后得到的效果图如下所示:

如何利用CSS选择器抓取京东网商品信息

最终效果图

新鲜的狗粮再一次出炉咯~~~

如何利用CSS选择器抓取京东网商品信息

CSS选择器

关于CSS选择器的简单介绍:

BeautifulSoup支持大部分的CSS选择器。其语法为:向tag对象或BeautifulSoup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回,即返回类型为list。

tag.select(“string”)

BeautifulSoup.select(“string”)

注意:在取得含有特定CSS属性的元素时,标签名不加任何修饰,如class类名前加点,id名前加 #。

如何利用BeautifulSoup选择器抓取京东网商品信息

昨天小编利用Python正则表达式爬取了京东网商品信息,看过代码的小伙伴们基本上都坐不住了,辣么多的规则和辣么长的代码,悲伤辣么大,实在是受不鸟了。不过小伙伴们不用担心,今天小编利用美丽的汤来为大家演示一下如何实现京东商品信息的精准匹配~~

HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树;因此可以说Beautiful Soup库是解析、遍历、维护“标签树”的功能库。

如何利用BeautifulSoup选择器抓取京东网商品信息

首先进入京东网,输入自己想要查询的商品,向服务器发送网页请求。在这里小编仍以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:
https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其中参数的意思就是我们输入的keyword,在本例中该参数代表“狗粮”,具体详情可以参考Python大神用正则表达式教你搞定京东商品信息。所以,只要输入keyword这个参数之后,将其进行编码,就可以获取到目标URL。之后请求网页,得到响应,尔后利用bs4选择器进行下一步的数据采集。

商品信息在京东官网上的部分网页源码如下图所示:

如何利用BeautifulSoup选择器抓取京东网商品信息

仔细观察源码,可以发现我们所需的目标信息是存在<a>标签下的,那么接下来我们就像剥洋葱一样,一层一层的去获取我们想要的信息。 直接上代码,如下图所示:

通常URL编码的方式是把需要编码的字符转化为%xx的形式,一般来说URL的编码是基于UTF-8的,当然也有的于浏览器平台有关。在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。 之后利用美丽的汤去提取目标信息,如商品的名字、链接、图片和价格,具体的代码如下图所示:

在本例中,有个地方需要注意,部分图片的链接是空值,所以在提取的时候需要考虑到这个问题。其解决方法有两个,其一是如果使用img[‘src’]会有报错产生,因为匹配不到对应值;但是使用get[‘src’]就不会报错,如果没有匹配到,它会自动返回None。

此外也可以利用try+except进行异常处理,如果匹配不到就pass,小伙伴们可以自行测试一下,这个代码测速过程在上图中也有提及哈。使用get方法获取信息,是bs4中的一个小技巧,希望小伙伴们都可以学以致用噢~ 最后得到的效果图如下所示:

新鲜的狗粮出炉咯~ 小伙伴们,有没有发现利用BeautifulSoup来获取目标信息比正则表达式要简单一些呢?

 

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

往期精彩文章推荐:

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

Python爬虫与数据挖掘

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

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他

 

利用Python正则表达式抓取京东网商品信息

京东(JD.com)是中国最大的自营式电商企业,2015年第一季度在中国自营式B2C电商市场的占有率为56.3%。如此庞大的一个电商网站,上面的商品信息是海量的,小编今天就带小伙伴利用正则表达式,并且基于输入的关键词来实现主题爬虫。

首先进去京东网,输入自己想要查询的商品,小编在这里以关键词“狗粮”作为搜索对象,之后得到后面这一串网址:
https://search.jd.com/Search?keyword=%E7%8B%97%E7%B2%AE&enc=utf-8,其实参数%E7%8B%97%E7%B2%AE解码之后就是“狗粮”的意思。那么非常明显,只要输入keyword这个参数之后,将其进行编码,就可以获取到我们的目标网址了,请求网页,得到响应,尔后利用选择器便可以进行下一步的精准采集了。

在京东网上,狗粮信息在京东官网上的网页源码如下图所示:

利用Python正则表达式抓取京东网商品信息

狗粮信息在京东官网上的网页源码

话不多说,直接撸代码,如下图所示。小编用的是py3,也建议大家以后多用py3版本。通常URL编码的方式是把需要编码的字符转化为%xx的形式,一般来说URL的编码是基于UTF-8的,当然也有的于浏览器平台有关。在Python的urllib库中提供了quote方法,可以实现对URL的字符串进行编码,从而可以进入到对应的网页中去。

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是一种可以用于模式匹配和替换的强有力的工具。找到目标网页之后,调用urllib中的urlopen函数打开网页并获取源码,之后利用正则表达式实现对目标信息的精准采集。

利用Python正则表达式抓取京东网商品信息

利用正则表达式实现对目标信息的精准采集

正则表达式写在这个程序中确实蛮复杂的,也占据了多行,但是主要用到的正则表达式是[\w\W]+?和[\s\S]+?。

[\s\S]或者[\w\W]是完全通配的意思,\s是指空白,包括空格、换行、tab缩进等所有的空白,而\S刚好相反。这样一正一反下来,就表示所有的字符,完全的,一字不漏的。另外,[]这个符号,表示在它里面包含的单个字符不限顺序的出现,比如下面的正则:[ace]/*,这表示,只要出现a/c/e这三个任意的字母,都会被匹配。

此外,[\s]表示,只要出现空白就匹配;[\S]表示,非空白就匹配。那么它们的组合,表示所有的都匹配,与它相对应的,有[\w\W]等,意义完全相同。其实,[\s\S] 和 [\w\W]这样的用法,比”.”所匹配的还要多,因为”.”是不会匹配换行的,所有出现有换行匹配的时候,人们就习惯 使用[\s\S]或者[\w\W]这样的完全通配模式。

最后得到的输出效果图如下所示:

利用Python正则表达式抓取京东网商品信息

输出效果图

这样小伙伴们就可以获取到狗粮的商品信息了,当然,小编在这里只是抛砖引玉,只匹配了四个信息,而且只是做了个单页的获取。需要更多数据的小伙伴们可以自行去更改正则表达式和设置多页,达到你想要的效果。下篇文章小编将利用美丽的汤BeautifulSoup来进行匹配目标数据,实现目标信息的精准获取。

最后给大家简单介绍一下正则表达式。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

正则表达式对于初学者确实晦涩难懂,不过慢慢学习还是可以掌握的,并不一定要完全记下来,但是你要知道什么时候需要什么参数,能做到顺利使用它就可以了。

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

往期精彩文章推荐:

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

Python爬虫与数据挖掘

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

在公众号后台回复下列关键词可以免费获取相应的学习资料:

Python、网络爬虫 、书籍、数据分析、机器学习、数据结构、

大数据、服务器、Spark、Redis、C++、C、php、

mysql、java、Android、面试题、课堂、其他