精华内容
下载资源
问答
  • Python应用实战代码-Python爬取新房数据
  • 主要介绍了Python爬取数据并实现可视化代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 今天小编就为大家分享一篇关于Python爬取数据保存为Json格式的代码示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • python爬取微博评论数据,爬虫之路,永无止境。。(附源码) 今天目标爬取微博任意博文的评论信息 工具使用 开发环境:win10、python3.6 开发工具:pycharm 工具包 :requests,re, time, random,tkinter 项目...

    用python爬取微博评论数据,爬虫之路,永无止境。。(附源码)

    今天目标爬取微博任意博文的评论信息

    工具使用

    开发环境:win10、python3.6
    开发工具:pycharm
    工具包 :requests,re, time, random,tkinter

    项目思路分析

    1.网页版登录拿回cookie值
    2.选取要爬的博文评论信息的网页版网址
    https://weibo.com/3167104922/Kkl7ar83T#comment为例
    3.根据网页版的地址抓包拿回博文唯一的id值(weibo_id)
    4.构造博文手机版评论请求的地址
    f’https://m.weibo.cn/comments/hotflow?id={weibo_id}&mid={weibo_id}&max_id_type=0’
    5.发送请求拿回响应的json数据
    6.max_id和max_id_type的值确定
    7.构造data参数,下次翻页请求要加上参数

    """构造GET请求参数"""
            data = 
    展开全文
  • Python爬取网页数据

    万次阅读 多人点赞 2018-08-29 17:20:35
    都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便 简介 爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息 准备 IDE:pyCharm 库:requests、...

    都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便


    简介

    爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息

    准备

    IDE:pyCharm
    库:requestslxml

    大概介绍一下,这俩库主要为我们做什么服务的
    requests:获取网页源代码
    lxml:得到网页源代码中的指定数据

    言简意赅有没有 ^_^

    搭建环境

    这里的搭建环境,可不是搭建python的开发环境,这里的搭建环境是指,我们使用pycharm新建一个python项目,然后弄好requests和lxml
    新建一个项目:

    光溜溜的啥也没有,新建个src文件夹再在里面直接新建一个Test.py吧

    依赖库导入
    我们不是说要使用requests吗,来吧
    由于我们使用的是pycharm,所以我们导入这两个库就会显的格外简单,如图:
    这里写图片描述
    Test.py中输入:

    import requests

    这个时候,requests会报红线,这时候,我们将光标对准requests,按快捷键:alt + enter,pycharm会给出解决之道,这时候,选择install package requests,pycharm就会自动为我们安装了,我们只需要稍等片刻,这个库就安装好了。lxml的安装方式同理.

    将这两个库安装完毕后,编译器就不会报红线了

    接下来进入快乐的爬虫时间

    获取网页源代码

    之前我就说过,requests可以很方便的让我们得到网页的源代码
    网页就拿我的博客地址举例好了:https://blog.csdn.net/it_xf?viewmode=contents
    获取源码:

    # 获取源码
    html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
    # 打印源码
    print html.text

    代码就是这么简单,这个html.text便是这个URL的源码

    获取指定数据

    现在我们已经得到网页源码了,这时就需要用到lxml来来筛选出我们所需要的信息
    这里我就以得到我博客列表为例

    首先我们需要分析一下源码,我这里使用的是chrome浏览器,所以右键检查,便是这样一份画面:
    这里写图片描述
    然后在源代码中,定位找到第一篇
    像这样?
    这里写图片描述
    操作太快看不清是不是?
    我这里解释一下,首先点击源码页右上角的箭头,然后在网页内容中选中文章标题,这个时候,源码会定位到标题这里,
    这时候选中源码的标题元素,右键复制如图:

    得到xpath,嘿嘿,知道这是什么吗,这个东西相当于地址。比如网页某长图片在源码中的位置,我们不是复制了吗,粘贴出来看看长啥样

    //*[@id="mainBox"]/main/div[2]/div[1]/h4/a

    这里给你解释解释:

    // 定位根节点
    / 往下层寻找
    提取文本内容:/text()
    提取属性内容:/@xxxx

    后面两个我们还没有在这个表达式见过,待会说,先摆张图放出来

    表达式://*[@id="mainBox"]/main/div[2]/div[1]/h4/a
    我们来琢磨琢磨,首先,//表示根节点,也就是说啊,这//后面的东西为根,则说明只有一个啊
    也就是说,我们需要的东西,在这里面
    然后/表示往下层寻找,根据图片,也显而易见,div -> main -> div[2] -> div[1] -> h4 -> a
    追踪到a这里,我想,你们应该也就看得懂了,然后我们在后面加个/text,表示要把元素的内容提取出来,所以我们最终的表达式长这样:

    //*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()

    这个表达式只针对这个网页的这个元素,不难理解吧?
    那么这个东西怎么用呢?
    所有代码:

    import requests
    from lxml import etree
    
    html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
    # print html.text
    
    etree_html = etree.HTML(html.text)
    content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()')
    for each in content:
        print(each)

    这时候,each里面的数据就是我们想要得到的数据了
    打印结果:

    
    
    
            如何撸一个ArrayList      
    
    

    打印结果却是这个结果,我们把换行和空格去掉

    import requests
    from lxml import etree
    
    html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
    # print html.text
    
    etree_html = etree.HTML(html.text)
    content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()')
    
    for each in content:
        replace = each.replace('\n', '').replace(' ', '')
        if replace == '\n' or replace == '':
            continue
        else:
            print(replace)
    

    打印结果:

    如何撸一个ArrayList 

    相当nice,那么,如果我们要得到所有的博客列表呢
    看图看表达式分析大法

    表达式://*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()
    其实我们能够很容易发现,main->div[2]其实包含所有文章,只是我们取了main->div[2]->div[1],也就是说我们只是取了第一个而已。所以,其实表达式写出这样,就可以得到所有的文章了

    //*[@id="mainBox"]/main/div[2]/div/h4/a/text()

    再来一次:

    import requests
    from lxml import etree
    
    html = requests.get("https://blog.csdn.net/it_xf?viewmode=contents")
    # print html.text
    
    etree_html = etree.HTML(html.text)
    content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div/h4/a/text()')
    
    for each in content:
        replace = each.replace('\n', '').replace(' ', '')
        if replace == '\n' or replace == '':
            continue
        else:
            print(replace)
    
    

    打印结果:

    如何撸一个ArrayList
    Android相机屏幕适配
    Tinker关于clean后准基包消失的解决方案
    Tinker使用指南
    git分支的使用
    如何将Androidstudio中的项目导入到第三方的git托管库中
    遍历矩阵
    从矩阵中取出子矩阵
    AndroidStudio配置OpenCV
    一步一步了解handler机制
    Android常用框架
    Android绘制波浪线
    RxJava系列教程之线程篇(五)
    RxJava系列教程之过滤篇(四)
    RxJava系列教程之变换篇(三)
    RxJava系列教程之创建篇(二)
    RxJava系列教程之介绍篇(一)
    一个例子让你彻底理解java接口回调
    SharedPreferences的用法及指南
    异步加载网络图片带进度
    VideoView加载闪黑屏
    android视频播放vitamio的简单运用
    仿网易新闻分类刷新
    ListViewCheckBox简单实现批量删除
    Android如何高效加载大图
    Android聊天界面实现方式
    抽屉侧滑菜单Drawerlayout-基本使用方法
    android-引导页的实现方式
    Java设计模式--工厂模式的自述
    javaweb学习路线
    getWindow().setFlags()使用说明书
    歪解Activity生命周期-----初学者彻底理解指南

    相当nice,我们得到了所有的文章列表。

    总结

    我们用到了requests获取网页列表,用lxml筛选数据,可以看出python用来在网页上爬取数据确实方便不少,chrome也支持直接在源码中得到表达式xpath,这两个库的内容肯定不止这一点点,还有很多功能等着你们去挖掘。对了,其中在写这篇博客的同时,我发现了一个很重要的问题:我的文章写的太少啦!【逃】

    展开全文
  • Python应用实战代码-python爬取股票最新数据并用excel绘制树状图
  • Python应用实战代码-python爬取『京东』商品数据
  • Python爬取知网论文信息,包含数据爬取、数据分析、数据可视化代码,直接输入关键词即可获取相关数据信息
  • Python爬取数据并存入MongoDB

    千次阅读 2020-04-17 00:29:54
    Python爬取数据并存入MongoDB 最近和朋友一起开发APP,需要大量数据,而"互联网"与"共享"融合发展的理念,遂资源的可重用给予了当代骚客文人获得感与幸福感…好了,不日白了(正宗重庆话,吹牛的意思),开始正题 ...

    最近和朋友一起开发APP,需要大量数据,而"互联网"与"共享"融合发展的理念,遂资源的可重用给予了当代骚客文人获得感与幸福感…好了,不日白了(正宗重庆话,吹牛的意思),开始正题

    BeautifulSoup4

    本人是做JavaWeb的,可能多多少少还是遗留了Java的一些格式及规范,但爬虫千千万,却是Python最好使

    1. Beautiful Soup4作为HTML/XML的解析器,其使用、解析难度都较为简单;
    2. 人性化的API,支持 lxml 的 XML解析器;
    3. 同样也支持CSS选择器、Python标准库中的HTML解析器;
    4. 在整个DOM树中,能够快速定位到理想位置节点,并获取相应的内容;
    5. 自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码;
    6. 安装:pip install beautifulsoup4

    Selenium + ChromeDriver与Requests

    1. Selenium是一个用于Web应用程序测试的开源自动化工具。直接运行在浏览器中,就像真正的用户在操作一样。而对于爬虫来讲,可视化的界面加模拟用户操作,简直是质的提升。
    2. ChromeDriver - WebDriver for Chrome,WebDriver是一个开源工具,用于在许多浏览器上自动测试webapps。它提供了导航到网页,用户输入,JavaScript执行等功能。ChromeDriver是一个独立的服务,它为 Chromium 实现 WebDriver 的 JsonWireProtocol 协议。
    3. Requests模块比urllib2模块更简洁,支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化。
    4. selenium安装:pip install selenium
    5. ChromeDriver安装:下载地址:http://chromedriver.storage.googleapis.com/index.htmlhttps://npm.taobao.org/mirrors/chromedriver/
      (1)首先解压压缩包
      (2)找到chromedriver.exe并复制到你的项目中的venv\Lib\site-packages\selenium\webdriver\chrome中
    6. Requests安装:pip install requests

    消息头与代理IP以及请求频率

    作为爬虫(非用户操作),是一定要学会伪装自己,不然仅仅是写代码测试的时候,多搞几下,人家网站的反爬措施就会冻结你一段时间,那就直接玩鸟了。

    1. 消息头:一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而遭到网站的拒绝。
      修改自己的headers可以将自己的爬虫脚本伪装成浏览器的正常访问,从而避免这一问题。
    # 较常见的headers
    headers = {
    	'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
    }
    # 或者你心情好,也可以搞个完善的headers,like this
    headers = {
    	'Accept': '*/*',
    	'Accept-Language': 'en-US,en;q=0.8',
    	'Cache-Control': 'max-age=0',
    	'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
    	'Connection': 'keep-alive',
    	'Referer': 'http://www.baidu.com/'
    }
    
    1. 设置代理IP:我们可以想象程序的运行速度是非常快的,当我们用爬虫获取某个网站的数据时,一个固定IP的访问频率远超人为操作的标准(即使你单身几十年,也不可能在几ms内,进行如此频繁的访问),所以网站一般会设置一个IP访问频率的阈值,一旦超出,就证明这是机器在搞骚操作。
      推荐西刺代理IP
    proxy = {'http':'106.46.136.112:808'}
    
    1. 请求频率:通俗点也可以是访问次数。前面提到,以非人为操作的频率访问别人的网站,本身这对于服务器来讲是一种压力,作为爬虫,应该尽量避免这种荒唐的事情发生,所以,适当减少自己的请求次数与请求节奏,对你对服务器,都是百利而无一害的。
      最简单的做法,可以让你的程序休息一会儿
    import time
    time.sleep(3000)
    

    MongoDB

    在此要感谢我的朋友TH,起初我只知道MongoDB这几个英文字母,是他作为引路人和实践者,让我认知到又一门技术,非常感谢你的引导!

    1. MongoDB是一个内存数据库,对数据的操作大部分都在内存中,支持冷/热数据处理,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多的节点,以保证服务器性能。
    2. 将数据存储为一个文档(即可以存放 xml、json、bson 类型的数据),数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
    3. 由此可见,相比较 MySQL,MongoDB 以一种直观文档的方式来完成数据的存储。它很像 JavaScript 中定义的 JSON 格式,不过数据在存储的时候 MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON。
    4. 存储方式为虚拟内存+持久化。支持大容量的存储,适合文件、图片等数据。
    5. MongoDB安装:https://www.mongodb.com/download-center/community;下载适合你操作系统及版本的安装包,具体流程可以百度。语法及使用具体操作,在这里就不做概述。

    最后献上代码,有误或可以调优的地方,还请留言指出,一定虚心接受

    # -*- coding:utf-8 -*-
    import json
    import re
    import time
    import random
    import requests
    import pymongo
    import bson.binary
    from selenium import webdriver
    from bs4 import BeautifulSoup
    
    
    BASE_URL = "https://music.xxx.com"
    HEADER = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
        }
    
    class GetData():
    
        def __init__(self):
            # 建立MongoDB数据库连接
            client = pymongo.MongoClient('192.168.31.68', 27017)
            # 连接所需数据库
            db = client["song"]
            # 连接所需集合
            self.lyric = db["lyric"]
            self.picture = db["picture"]
    
    
        @staticmethod
        def get_driver():
            """  获取Chrome driver """
            # 进入阅览器
            options = webdriver.ChromeOptions()
            # 设置header
            options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"')
            # 加载chromedriver.exe
            chrome_driver = r"D:\myProject\worker\venv\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe"
            driver = webdriver.Chrome(executable_path=chrome_driver, chrome_options=options)
            return driver
    
        @staticmethod
        def get_chrome(driver, url):
            """  获得HTML页面内容 """
            time.sleep(random.randint(10, 30))  # 主线程随机暂停 10至30秒
            driver.get(url)
            iframe = driver.find_elements_by_tag_name('iframe')[0]
            driver.switch_to.frame(iframe)
            return BeautifulSoup(driver.page_source, "lxml")
    
        @staticmethod
        def get_request(url):
            """  封装request的GET请求 """
            time.sleep(random.randint(10, 30))  # 主线程随机暂停 10至30秒
            data = requests.get(url, headers=HEADER)
            return data
    
        @staticmethod
        def get_lrc(song_id):
            """  解析拼装歌词 """
            lrc_url = 'http://music.xxx.com/api/song/lyric?' + 'id=' + str(song_id) + '&lv=1&kv=1&tv=-1'
            html = GetData.get_request(lrc_url).text
    
            # 转换为json
            j = json.loads(html)
    
            # 英文歌词
            lrc = j['lrc']['lyric']
            # 中文歌词
            cn_lrc = j['tlyric']['lyric']
    
            # 正则去掉[]及里面内容
            pat = re.compile(r'\[.*\]')
            lrc = re.sub(pat, "", lrc)
            cn_lrc = re.sub(pat, "", cn_lrc)
            # 获得英文和中文歌词
            lrc = lrc.strip()
            cn_lrc = cn_lrc.strip()
    
            a = lrc.split("\n")
            b = cn_lrc.split("\n")
    
            result = ""
            for index_en in range(len(a)):
                for index_cn in range(len(b)):
                    if index_en == index_cn:
                        result += a[index_en] + "\n" + b[index_en] + "\n"
    
            return result
    
    
        def get_netease_cloud(self, count):
            driver = GetData.get_driver()
            # 只搜索类型为欧美的歌曲
            url = BASE_URL + "/#/discover/playlist/?order=hot&cat=欧美&limit=35&offset=" + str((0 + count) * 35)
            soup = GetData.get_chrome(driver, url)
    
            # img_html = soup.find_all('img', class_=re.compile('j-flag'))
            # img_data = GetData.get_request(img_html[count]['src'])
    
            # 过滤class为msk的a标签,检索出每张专辑ID及访问路径
            msg = soup.find_all('a', class_=re.compile('msk'))
    
            for playlist in msg:
                """ 单张专辑的歌曲目录 """
                url = BASE_URL + playlist['href']
                soup = GetData.get_chrome(driver, url)
                # 获取table列表中播放按钮的ID值
                play = soup.find_all('span', class_=re.compile('ply'))
    
                for play_id in play:
                    try:
                        url = BASE_URL + "/song?id=" + play_id['data-res-id']
                        soup = GetData.get_chrome(driver, url)
    
                        # 获取图片
                        song_img = soup.find_all('img', class_=re.compile('j-img'))
                        song_img_data = GetData.get_request(song_img[0]['data-src']).content
    
                        # 歌名
                        song_name = soup.find_all('em', class_=re.compile('f-ff2'))
                        # 歌手名与所属专辑
                        singer, album = soup.find_all('p', class_=re.compile('des s-fc4'))
    
                        pat = re.compile('>(.*?)<')
                        pat_song_name = ''.join(pat.findall(str(song_name[0])))
                        pat_singer = ''.join(pat.findall(str(singer)))
                        pat_album = ''.join(pat.findall(str(album)))
    
                        result = "歌名:" + pat_song_name + "\n" + pat_singer + "\n" + pat_album + "\n" + GetData.get_lrc(
                            play_id['data-res-id'])
    
                        self.picture.save(dict(
                            song_name=pat_song_name,
                            img=bson.binary.Binary(song_img_data)
                        ))
    
                        self.lyric.save(dict(
                            song_name=pat_song_name,
                            singer=pat_singer,
                            album=pat_album,
                            lyric=result
                        ))
                    except Exception as e:
                        print(e)
                        pass
                    continue
    
            driver.quit()
    
    
    if __name__ == '__main__':
        count = 0
        lic = GetData()
        while(count < 38):
            lic.get_netease_cloud(count)
            count += 1
    
    
    展开全文
  • 主要给大家介绍了关于利用Python爬取微博数据生成词云图片的相关资料,文中通过示例代码介绍非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 结构很清晰简单,我们就是要爬 tr 标签里面的 style 和 tr 下几个并列的 td 标签,下面是爬取代码: #!/usr/bin/env python # coding=utf-8 import requests from bs4 import BeautifulSoup import MySQLdb print...
  • python爬取数据并将其存入mongodb

    万次阅读 2017-05-05 16:42:09
    python爬取数据并将其存入mongodb

    其实很早就想知道如何将爬取到的数据存入数据库,并且实现前后台的交互功能,昨天刚刚看了一集关于爬数据并存数据的视频,今天,在这里总结一下~吐舌头

    以下为最终所需要爬取的信息:


    由于需要爬取所有的二手商品信息,所以以下内容也要爬取到:


    1.先写一个py文件,用于爬取上述图片类目导航的各个链接:

    #-*-coding:utf-8-*-
    from bs4 import BeautifulSoup
    import requests
    
    start_url = 'http://bj.58.com/sale.shtml'
    url_host = 'http://bj.58.com'
    
    def get_channel_urls(url):
        wb_data = requests.get(start_url)
        soup = BeautifulSoup(wb_data.text,'html.parser')
        links = soup.select('ul.ym-submnu > li > b > a')
        for link in links:
            page_url = url_host + link.get('href')
            print page_url
    get_channel_urls(start_url)
    
    #类目导航链接
    channel_list = '''
        http://bj.58.com/shouji/
        http://bj.58.com/tongxunyw/
        http://bj.58.com/danche/
        http://bj.58.com/fzixingche/
        http://bj.58.com/diandongche/
        http://bj.58.com/sanlunche/
        http://bj.58.com/peijianzhuangbei/
        http://bj.58.com/diannao/
        http://bj.58.com/bijiben/
        http://bj.58.com/pbdn/
        http://bj.58.com/diannaopeijian/
        http://bj.58.com/zhoubianshebei/
        http://bj.58.com/shuma/
        http://bj.58.com/shumaxiangji/
        http://bj.58.com/mpsanmpsi/
        http://bj.58.com/youxiji/
        http://bj.58.com/jiadian/
        http://bj.58.com/dianshiji/
        http://bj.58.com/ershoukongtiao/
        http://bj.58.com/xiyiji/
        http://bj.58.com/bingxiang/
        http://bj.58.com/binggui/
        http://bj.58.com/chuang/
        http://bj.58.com/ershoujiaju/
        http://bj.58.com/bangongshebei/
        http://bj.58.com/diannaohaocai/
        http://bj.58.com/bangongjiaju/
        http://bj.58.com/ershoushebei/
        http://bj.58.com/yingyou/
        http://bj.58.com/yingeryongpin/
        http://bj.58.com/muyingweiyang/
        http://bj.58.com/muyingtongchuang/
        http://bj.58.com/yunfuyongpin/
        http://bj.58.com/fushi/
        http://bj.58.com/nanzhuang/
        http://bj.58.com/fsxiemao/
        http://bj.58.com/xiangbao/
        http://bj.58.com/meirong/
        http://bj.58.com/yishu/
        http://bj.58.com/shufahuihua/
        http://bj.58.com/zhubaoshipin/
        http://bj.58.com/yuqi/
        http://bj.58.com/tushu/
        http://bj.58.com/tushubook/
        http://bj.58.com/wenti/
        http://bj.58.com/yundongfushi/
        http://bj.58.com/jianshenqixie/
        http://bj.58.com/huju/
        http://bj.58.com/qiulei/
        http://bj.58.com/yueqi/
        http://bj.58.com/chengren/
        http://bj.58.com/nvyongpin/
        http://bj.58.com/qinglvqingqu/
        http://bj.58.com/qingquneiyi/
        http://bj.58.com/chengren/
        http://bj.58.com/xiaoyuan/
        http://bj.58.com/ershouqiugou/
        http://bj.58.com/tiaozao/
        http://bj.58.com/tiaozao/
        http://bj.58.com/tiaozao/
    
    '''
    
    


    2.建立另一个py文件,用于爬取商品信息:

    from bs4 import BeautifulSoup
    import requests
    import time
    import pymongo
    
    client = pymongo.MongoClient()
    ceshi = client['ceshi']
    url_list = ceshi['url_list3']
    item_info = ceshi['item_info3']
    
    def get_links_from(channel,pages,who_sells=0):
        list_view = '{}{}/pn{}'.format(channel,str(who_sells),str(pages))
        wb_data = requests.get(list_view)
        time.sleep(1)
        soup = BeautifulSoup(wb_data.text,'html.parser')
        if soup.find('td','t'):
            for link in soup.select('td.t a.t'):
                item_link = link.get('href').split('?')[0]
                url_list.insert_one({'url':item_link})
                print item_link
        else:
            pass
    
    def get_item_info(url):
        wb_data = requests.get(url)
        soup = BeautifulSoup(wb_data.text,'html.parser')
        no_longer_exist = '404' in soup.find('script',type="text/javascript").get('src').split('/')
        if no_longer_exist:
            pass
        else:
            title = soup.title.text
            price = soup.select('span.price.c_f50')[0].text
            date = soup.select('.time')[0].text
            area = list(soup.select('.c_25d a')[0].stripped_strings) if soup.find_all('span','c_25d') else None
            item_info.insert_one({'title':title,'price':price,'date':date,'area':area})
            print({'title':title,'price':price,'date':date,'area':area})
    
    get_item_info('http://bj.58.com/shuma/28049255291945x.shtml')
    #get_links_from('http://bj.58.com/shuma/',2)
    


    在第二个py文件中,需要注意的是:

    1.连接mongodb时,可以不用提前在mongovue中建立数据库和collection,它会自动创建。

    2.定义的第一个函数是用来爬取每个商品的具体url,并将其存入mongodb,第二个函数是通过每个商品具体的url来爬取相应的商品信息,并存入数据库,这两个函数不能同时运行。

    3.在这次的爬虫项目中,有好多爬取技巧,如:

    links = soup.select('ul.ym-submnu > li > b > a')
    list_view = '{}{}/pn{}'.format(channel,str(who_sells),str(pages))
            for link in soup.select('td.t a.t'):
                item_link = link.get('href').split('?')[0]
                url_list.insert_one({'url':item_link})
    area = list(soup.select('.c_25d a')[0].stripped_strings) if soup.find_all('span','c_25d') else None


    等等,嘻嘻,反正这些我感觉比较新颖~~

    最后,将数据存入数据库其实就是在连接数据库时,代码中有插入语句,就行~~

    展示一下数据库中结果:







    展开全文
  • 利用python爬取京东数据
  • Python爬取天气数据及可视化分析

    万次阅读 多人点赞 2020-07-29 10:48:23
    Python爬取天气数据及可视化分析 文章目录Python爬取天气数据及可视化分析说在前面1.数据获取请求网站链接提取有用信息保存csv文件2.可视化分析当天温度变化曲线图当天相对湿度变化曲线图温湿度相关性分析图空气质量...
  • 运行的软件是python3,里面命名不规则,可以爬取贴吧,微博及微信公众号里的数据及一些学习时写的代码,可以将数据成功导出到数据库里。只需要改连接数据库的语句。
  • python爬取数据保存到Excel中

    万次阅读 2019-08-02 19:35:59
    Python版本:3.6 相关模块: import requests from lxml import etree import time, random, xlwt 主要思路: 1.两页的内容 2.抓取每页title和URL 3.根据title创建文件,发送URL请求,提取数据 效果展示: 完整...
  • Python写的爬取数据代码,代码有注释,可以直接运行,文件保存路径可以使用默认路径或修改为自己想保存的路径。 爬取目标网页中的历史双色球开奖号码以及一等奖二等奖中奖注数的数据,将数据保存到名为(历史双色球....
  • 如何使用python爬取数据

    千次阅读 2019-01-19 12:48:27
    爬取数据之前首先使用:pip install requests 命令 下载:requests包提示下载完成后执行下列代码:   import requests base_url ="http://list.iqiyi.com/www/1/-------------11-1-1-iqiyi--.html"...
  • Python爬取数据存储到本地文本文件

    千次阅读 2018-12-25 23:11:55
    前面说过Python爬取数据可以存储到文件、关系型数据库、非关系型数据库。前面两篇文章没看的,可快速戳这里查看!https://mp.weixin.qq.com/s/A-qry4r3ymuCLXLBTF6Ccw ... 而存储到文件的数据一般都具有时效性,例如...
  • python爬取天气数据

    2020-12-22 11:11:30
    第二步:用python的urllib2库爬取对应城市的天气数据。 第三步:打印天气数据 有了思路,开始打代码: import urllib.request import gzip import json def get_weather_data() : city_name = input('请输入要查询的...
  • Python爬取数据并写入MySQL数据库

    万次阅读 多人点赞 2017-04-20 14:15:58
    按 F12 或 ctrl+u 审查元素,结果如下:  结构很清晰简单,我们就是要爬 tr 标签里面的 style 和 tr 下几个并列的 td 标签,下面是爬取代码:#!/usr/bin/env python # coding=utf-8import requests from bs4
  • 主要介绍了python爬取亚马逊书籍信息代码分享,具有一定借鉴价值,需要的朋友可以参考下。
  • python爬取数据热点词生成词云

    千次阅读 2017-10-18 23:08:24
    从某一网站爬取数据,比如我是在豆瓣爬取的书评利用Requests库的get()爬取网页 使用BeatifulSoup库对爬取网页进行解析。 写入文件2.对所爬取字符串分词利用分词器 jieba ,逐行用jieba分词,单行代码如:word_...
  • 80行Python代码爬取全国养老信息网数据,可以作为科研研究对象和资料,爬取的内容和数据条数,你可以自己设置,直接可以运行!!!!
  • 2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27...
  • python爬取数据并存入excel

    千次阅读 2019-01-17 15:17:51
    公司的爬虫项目:爬取数据,以满足文本分析,词频统计的需要。由同事整理好所需链接存入excel,我直接打开连接,爬取网站数据。由于仅仅需要进行词频分析,不需要进一步的挖掘,又因为不同网站源码差距很大,故采取...
  • 使用python爬取笑掉大牙网站的笑话数据,大概2000+条记录,每条记录大概六个笑话,累积笑话数量上万。我还对数据进行了处理,分别是ansi编码和utf-8编码,方便大家查看和上传到数据库使用。不过声明,此程序纯属学习...
  • python爬取大众点评数据

    千次阅读 2020-01-13 15:58:11
    python爬取大众点评数据 python+requests+beautifulsoup爬取大众点评评论信息 Chrome如何获得网页的Cookies 如何查看自己访问网站的IP地址 Win10怎么以管理员身份运行CMD命令提示符 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,315
精华内容 24,526
关键字:

python爬取数据代码

python 订阅