在及时可以说很流行,python环境怎么装自己就不赘述了

本科阶段即将散场,我本科最终一项任务毕业设计也跻身尾声。

爬取天猫美食前100页的title,image,location等现有到mongodb上
selenium python
官网:http://selenium-python.readthedocs.io/
http://selenium-python-zh.readthedocs.io/en/latest/

ps:python环境怎么装自己就不赘述了。。。那个材料太多了,我推荐使用python2.7
或 python3.4

指引老师跟自己说,本科结业设计不需求更新,不过工作量一定要够,我就明白又要搞工作了。

图片 1

IDE选择

工欲善其事,必先利其器。我自身用过挺多脚本语言的,讲道理,脚本语言很难有卓越的ide,不过pycharm绝对是本身用过的最赞的脚本语言ide,不要犹豫,直接用它就好了。官网链接:http://www.jetbrains.com/pycharm/download/,最好下载专业版的,方便广大
ps:干货之一,pycharm专业版激活server一枚:http://idea.qinxi1992.cn
,可以屡屡用啊

本身采纳的毕业设计标题是网络爬虫与数量解析,在即时可以说很时尚,很流行。

1.png

浏览器采用

Chrome或火狐,开发必备。所以我们果断都去下载Chrome或火狐吧。。

本人将我的完成学业设计分为四片段。每一部分都会有实际代码与注释,也会有局地外延知识的提及与座谈,欢迎大家一起读书进步。

程序在 windows10 下执行
率先安装各类模块和库:

爬虫重视库介绍

  • beautifulsoup
  • requests
  • lxml
  • pymongo

如上便是我们编辑简单爬虫程序须求的python库,我大约介绍一下(ps:不想复制百科):

  • beautifulsoup库,紧要功能就是急迅处理抓下来的数目,找到您想要的东西,它就是一个工具箱,通过分析文档为用户提供要求抓取的数额。
  • requests模块,满意大家各个种种的网络要求,持 HTTP
    连接保持和连接池,帮助选用 cookie 保持会话,辅助文件上传等
  • lxml库,lxml是Python语言里和XML以及HTML工作的职能最丰盛和最不难选用的库,大家用来同盟beautifulsoup使用
  • pymongo,用来和mongoDB数据库进行相互,大家爬下来的多上将被存在mongoDB中,当然假诺你用mysql等数据库用习惯了也足以不用理这一部分。

爬虫简单介绍

所谓爬虫就是编制代码从网页上爬取自己想要的多寡,代码的质量控制了你能依然不能规范的爬取想要得到的数量,获得数码后是还是不是直观正确的分析。

Python无疑是独具语言中最适合爬虫的。Python本身很简短,不过真正用好它需要学习大量的第三方库插件。比如matplotlib库,是一个仿照matalab的兵不血刃的绘图库,用它可以将爬下来的数额画出饼图、折线图、散点图等等,甚至是3D图来直观的来得。

Python第三方库的安装能够手动安装,但是越来越方便的是在命令行直接输入一行代码即可自行检索资源并安装。再者越发智能,可以辨认自己电脑的体系找到最合适的本子

Pip install +你所需要的第三方库

或者是easy install +你所需要的第三方库

那边指出大家利用pip安装,因为pip可以安装也足以卸载,而另一种办法只可以设置。假若遭遇你想行使新的版本的第三方库,使用pip的优势就会显现出来。

  1. 安装Selenium,pip install selenium
    它是自动化测试工具。匡助各类浏览器,包涵 Chrome,Safari,Firefox
    等主流界面式浏览器,安装一个Seleium驱动,我设置的是谷歌webdriver.Chrome(),那是驱动地址:https://npm.taobao.org/mirrors/chromedriver/2.34/(境内的源)
安装

首先片段:交互界面设计

交互界面.png

为了增添工作量,我设计了一个相互界面来凝聚。其实很粗略,用的是python自带的第三方库Tkinter。注意,引用那一个库的时候呢,必须大写。我就因为这些分寸写标题,纠结了一深夜才察觉出错误。

def web():
    root = Tk()
    Label(root,text='请输入网址').grid(row=0,column=0)           #对Label内容进行表格式布局
    Label(root,text='请输入User-Agent :').grid(row=1,column=0)
    v1=StringVar()    #设置变量
    v2=StringVar()   
    e1 = Entry(root,textvariable=v1)            #用于储存 输入的内容
    e2 = Entry(root,textvariable=v2)
    e1.grid(row=0,column=1,padx=10,pady=5)      #进行表格式布局                
    e2.grid (row=1,column=1,padx=10,pady=5)
    url = e1.get()                              #将从输入框中得到的网址赋值给url
    head = e2.get()

本身那只是简简单单的统筹一个互动界面,python有尤其充足的框架可以让界面越发和谐以及精彩。

有界面的自动化浏览器只适合测试,总不能够爬取的时候一向开着一个浏览器吧,PhantomJS
是无界面的浏览器, 用 谷歌 浏览器测试完后就换成那个,
下载地址:http://phantomjs.org/

mac环境

在安装lxml以前记得在极端敲如下命令xcode-select --install,用来安装Command
Line Tools
pip install BeautifulSoup4
pip install requests
pip install lxml
pip install pymongo

如果用mac的话自带的python版本可以满足大家的要求,里面内置了pip,所以只需求在极端敲上边的指令就可以了。当然,有更简短的安装方式,在pycharm中安装,接纳File->Default
Settings 如图:

图片 2

firstPic.png

挑选右下角‘+’标志,如图:

图片 3

secPic.png

下一场搜索你要的库的名字举办安装即可,以上就是mac下的设置格局,不得不说,mac是最简便的。。。

其次有些:python爬虫

(那有些代码参考简书ID方志朋的篇章)

我那边爬虫所爬取的是一位闻名博主的博客,并对其具有的稿子举办结巴分词。从而提取关键词,分析那位博主使用即时相比较热的与网络相关的词汇的成效。

工作台数据.png

思路是这样的。

先编制一个函数download()获取url,接着编写一个函数parse_descrtion()解析从
url中赢得的html,最终结巴分词。

def download(url):                          #通过给定的url爬出数据
    if url is None:
        return None
    try:
        response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36', })
    if (response.status_code == 200):
        return response.content
    return None
    except:
        return None



def  parse_descrtion(html):                                                         
    if html is None:
        return None
    soup = BeautifulSoup(html, "html.parser")         #html字符串创建BeautifulSoup
    links = soup.find_all('a', href=re.compile(r'/forezp/article/details'))
    for link in links:
        titles.add(link.get_text())



def jiebaSet():
    strs=''
    if titles.__len__()==0:
        return
    for item in titles:
        strs=strs+item;
    tags = jieba.analyse.extract_tags(strs, topK=100, withWeight=True)
    for item in tags:
        print(item[0] + '\t' + str(int(item[1] * 1000)))

首个函数没什么好说的。

其次个函数用到了beautifulsoup,通过对网页的剖析,从而寻找具有的满足条件为
href=re.compile(r’/forezp/article/details’)的a标签里的内容。

其四个函数就是结巴分词。接下来对结巴分词作容易的介绍。

协理三种分词形式。

规范形式:试图将句子最可相信地切开,适合文本分析。

全格局:把句子中所有的可以成词的辞藻都围观出来,速度尤其快,不过不可能化解歧义。

摸索引擎格局:在精确格局的基础上,对长词再度切分,进步召回率,适合用于搜索引擎分词。

举个例子,结巴分词“我赶到新加坡清华高校”那句话。

【全方式】:我/来到/上海/哈工大/交大大学/华大/高校

【精确形式】:我/来到/日本首都/浙大高校

运作时出现 warnings.warn(‘Selenium support for PhantomJS has been
deprecated, please us , 搜了一下是说 Selenium 将来不再帮衬 PhantomJS ,
百度上说旧版的 PhantomJS 可以应用,试了依旧不行,就直接换成了 谷歌 的
chromedriver.exe

linux安装

ubuntu为例
安装pip,首先在巅峰键入wget https://bootstrap.pypa.io/get-pip.py
接下来键入sudo python get-pip.py安装pip
设置达成之后安装lxml,键入
sudo apt-get install python-lxml
从此未来相继键入
pip install BeautifulSoup4
pip install requests
pip install pymongo
安装收尾
ps:centos系统须要安装看重,先键入yum install python-devel libxml2-devel libxslt-devel,然后再使用pip安装lxml即可

其三片段:连接mongoDB数据库

client = pymongo.MongoClient("localhost", 27017)

那句是采纳给定主机地点和端口。pymongo的Connection()方法不提出使用,官方推荐新格局MongoClient()。

db = client['local']

那句是将创制好mongoDB后默许存在的八个数据库中的其中一个“local”赋给db,这样
db在随后的程序里就表示数据库local。

posts = db.pymongo_test
post_id = posts.insert(data)

将local里默许的一个聚众“pymongo_test”赋值给posts,并且用insert方法单个插入数据。最后回来结巴分词里的一个巡回程序里,将数据依次插入。

上述是关于连接数据库的基本代码,接下去介绍如何启动mongoDB数据库。(自家一开端编程怎么都一连不上,后来意识是数据库自身没有启动,唉,编程里爆发的傻逼事情莫过于是太多了。)

微软徽标+R,输入cmd,找“mongodb”的途径,然后运行mongod开启命令,同时用–dbpath指定数量存放地方为“db”文件夹。

启动mongoDB

我那里是置身了E盘,大家依据要求自己安装。最终要看下是不是打开成功,从图中的新闻中获知,mongodb选用27017端口,那么大家就在浏览器输http://localhost:27017,打开后mongodb告诉大家在27017上Add
1000得以用http格局查看mongodb的保管音信。

  1. 下载地址是
    https://npm.taobao.org/mirrors/chromedriver/
    下载后的 chromedriver.exe 文件要在程序中导入所在的门路,见 browser
windows安装

首先,安装pip,参考http://www.tuicool.com/articles/eiM3Er3
安装完成之后选择pycharm安装(如mac),或者在命令行键入
pip install BeautifulSoup4
pip install requests
pip install pymongo
安装lxml:https://pypi.python.org/pypi/lxml/3.2.3下载对应的版本,或者去网上查找对应的whl文件安装,不在一一赘述。

任何装置完之后,启动python解释器键入
import requests
import lxml
from bs4 import BeautifulSoup
import pymongo
未曾报错则环境设置完结

第四有些:数据解析

最终一局地就是数据解析了,我那里用了五个工具。

一个是用artword在线工具,地址:[https://wordart.com\]

云图效果

另一个就是运用matplotlib第三方库绘图更直观更系统的彰显多少。首个工具很简短,大家进来网站就会使用,现在重点介绍第两种工具的利用。

先介绍饼图的运用。

plt.figure(figsize=(6,9))     #调节图形大小,宽,高
labels = [u'springboot',u'Cloud',u'spring']    #定义饼状图的标签,标签是列表
sizes = [47.2,30.5,22.3,]#每个标签占多大,会自动去算百分比
colors = ['red','yellowgreen','lightskyblue']
explode = (0.05,0,0)#将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙

patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors,
labeldistance = 1.1,autopct = '%3.1f%%',shadow = startangle = 90,pctdistance = 0.6)#labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置

#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
#shadow,饼是否有阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
#pctdistance,百分比的text离圆心的距离
#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本
#改变文本的大小
#方法是把每一个text遍历。调用set_size方法设置它的属性
for t in l_text:
    t.set_size(15)
for t in p_text:
    t.set_size(15)
#设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend()
plt.show()

饼图.png

然后是条形图的接纳。

people = ('springboot', 'Cloud', 'spring')
y_pos = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))
performance = (307,189,144)
error = np.random.rand(len(people))
plt.barh(y_pos, performance, xerr=error, align='center', alpha=0.4)
plt.yticks(y_pos, people)
plt.xlabel('time')
plt.ylabel('name')
plt.title('blog bar chart')
plt.show()

条形图.png

自家用的 谷歌(Google) Chrome 是 32位的 66.0 ,下载的 chromedriver.exe 是 2.37
的,运行成功。
将下载的 chromedriver.exe 文件拖动到python安装目录下,使得 python
可以找得到这些文件就足以了。

安装MongoDB

mongodb安装的话四个条件大致流程,我以mac为例:
先是去官网下载https://www.mongodb.org/downloads新式版本的mongoDB压缩包,解压之后打开终端,进入mongoDB解压的目录,我的目录如下

图片 4

thrPic.png

然后cd bin
新建一个mongo.conf文本,编辑该公文,写入:
dbpath=/Users/Darker/mongo/bin/db logpath=/Users/Darker/mongo/bin/log/mongod.log port = 27017 fork = true nohttpinterface = true
中间dbPath是数据库存储地方,logPath是log的积存地点,记得在对应位置创制文件夹,如图所示

图片 5

fourthPic.png

接下去在命令行键入./mongod --config mongo.conf,得到如下音讯则启动成功

图片 6

fifthPic.png

接下去运行./mongo即可进入数据库,当然,推荐使用部分可视化的数据库管理工具,例如robomongo

Ps:windows的同学不必要写conf文件了,间接根据那篇博客上边配置mongo服务就足以了http://www.cnblogs.com/flyoung2008/archive/2012/07/18/2597269.html

总结

python给人的共同体感到就是代码简洁,作用强大。针对数据解析有其极度的作用和准确的剖析能力。

我们大学软件工程一位大神去了前些天头条,干的就是python工程师,本科就获得了28W的年薪。

在眼前的大数额时代,python语言的利用频率也在稳步上涨,其用途也会进一步广。

还在等什么,赶紧学python去吧

  1. 安装 Pyquery, pip install pyquery
    pyquery 类似 jquery
    的用法,有那些的主意和函数,可以精确定位网页中的元素,属于解析 html
    网页的库。

  2. 安装 pymongo, pip install pymongo
    python 调用 mongodb,需要 pymongo 驱动

写在结尾

那篇大家讲课了条件的配置,假诺大家有其他难点欢迎留言探讨或咨询,我有时光会挨个回复大家,下一章大家正式开头攻读爬虫

有趣味的同室能够加群498945822联袂交换学习哦~~
察觉标题标同班欢迎指正,间接说就行,不用留面子,博主脸皮厚!

由于在电脑上设置完 mongoDB 一贯总是不上,总是 failed
,所幸就在虚拟机上设置 mongoDB
,在虚拟机上又跑不动那么多程序,只好把数据存到 text 文档,学习一下使用
mongoDB 。

  1. 安装 mongoDB
    网址:http://blog.csdn.net/polo\_longsan/article/details/52430539

次第开头

import json
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from pyquery import PyQuery as pq
#import pymongo
#引入头文件,注释掉的是引入 mongodb,因为电脑连接不上mongodb,就不用了
#client = pymongo.MongoClient(MONGO_URL)
#db = client[MONGO_DB]

函数 search 前的是安装 browser, search 抓取首页和发送Taobao搜索关键词

chrome_options = Options()
#设置为 headless 模式,注释掉就会弹出Google浏览器窗口显示
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(executable_path=(r'C:\Users\libai\AppData\Local\Google\Chrome\Application\chromedriver.exe'), chrome_options=chrome_options)
#browser 中的地址是所下载的 chromdriver.exe  所放的位置,我把它放到了 chrome 安装目录下
wait = WebDriverWait(browser, 10)
def search():
    try:
        browser.get('https://www.taobao.com/')
        #用的是 CSS 选择器
        inputs = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#q")))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_TSearchForm > div.search-button > button")))
        inputs.send_keys("美食")
        submit.click()
        total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.total")))
        result = int(re.compile("(\d\d\d)").search(total.text).group(1))
        get_products()
        return result
    except TimeoutException:
        search()
        #一旦超时,就重新调用 search

在抓取完页面后, 跳下一页,直接在 inputs
中输入跳转的页面,点击确定就行了

def next_page(page_number):
    try:
        inputs = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > input")))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit")))
        inputs.clear()
        inputs.send_keys(page_number)
        submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > ul > li.item.active > span"), str(page_number)))
        get_products()
    except TimeoutException:
        next_page(page_number)

赢得页面详细音讯,使用 pyquery 提取页面中的元素

def get_products():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-itemlist .items .item")))
    #等待页面加载完成
    html = browser.page_source
    doc = pq(html)
    #.items() 函数属性是提取多个
    items = doc('#mainsrp-itemlist .items .item').items()
    for item in items:
        product = {
            'image' : item.find('.pic .pic-link .img').attr("src"),
            'price' : item.find('.row .price').text().replace('\n', '') ,
            'deal' : item.find('.row .deal-cnt').text()[:-3],
            'title' : item.find('.title').text().replace('\n', ' '),
            'shop' : item.find('.shop').text(),
            'location' : item.find('.location').text()
        }
        print('---------------------------------')
        save_to_text(product)

储存到 text 文件中,不加 encoding=”UTF-8″ ,会报编码错误, json
格式越发有益于于存取

def save_to_text(product):
    try:
        with open("product.txt", "a", encoding="UTF-8") as f:
            f.write(json.dumps(product) + '\n')
        print("写入成功", product)
    except:
        print("写入失败", product)

主程序

def main():
    with open('product.txt', "w", encoding="UTF-8") as f:
        print("新建product.txt文件成功")
    total = search()
    print("一共有 " + str(total) + " 页")

    for i in range(2, total):
        print("跳转到第 %d 页" %i)
        next_page(i)
    browser.close()


if __name__ == "__main__":
    main()

从 text 文件中读取,再写入到 mongoDB 数据库中

import json
import pymongo


MONGO_URL = "localhost"
MONGO_DB = "taobao"
MONGO_TABLE = 'product'

client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]

def openandsave(filename):

    file = open(filename) 
    while 1:
        lines = file.readlines(100000)
        if not lines:
            break
        for line in lines:
            print(json.loads(line))
            save_to_mongodb(json.loads(line))
            print('-----------------')
    file.close()

def save_to_mongodb(result):
    try:
        if db[MONGO_TABLE].insert(result):
            print('存储到MONGODB成功', result)
    except:
        print('存储到MONGODB失败', result)

def main():
    filename = "product.txt"
    openandsave(filename)

if __name__ == '__main__':
    main()

看起来不是很对,有些细节的地方尚未调整好

图片 7

2.png

数据库图片

图片 8

3.png

相关文章