python爬虫:爬取易迅网价格信息,并写入Mysql数据库

本程序涉及以下方面知识:

1.python链接mysql数据库:http://www.cnblogs.com/miranda-tang/p/5523431.html

 

2.爬取中文网站以及各种乱码处理:http://www.cnblogs.com/miranda-tang/p/5566358.html

 

3.BeautifulSoup使用

4.原网页数据信息不全用字典的方式,把不存在的字段设置为空

详细代码:

#!/usr/bin/python
# -*- encoding:utf-8 -*-

‘‘‘
思路:
1.
从易迅网爬取冰箱的数据,包括品牌,型号,价格,容积,能效等级,制冷方式,门款式,显示方式,定频/变频,除霜模式,操作方式
2.
存入MYSQL数据库
本次限定为:
300L以上
‘‘‘

from bs4 import BeautifulSoup
import requests
import MySQLdb
import datetime
#编码
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

#连接数据库,并插入爬到的数据
def insert_db(page_list):
    try:
        #注意链接时加上charset=‘utf8‘解决编码问题
       
conn = MySQLdb.connect(user=‘root‘, passwd=‘112233aa‘,host=‘192.168.1.14‘,db=‘miranda.tang‘,charset=‘utf8‘)
        cursor = conn.cursor()
        #删除当日已插入数据,避免重复插入
       
cursor.execute(‘DELETE FROM yixun_price_refrigerator
WHERE update_day=
CURRENT_DATE()‘)
        conn.commit()   #提交
       
#executemany一次性提交爬取数据,比直接用execute
       
sql=‘INSERT INTO yixun_price_refrigerator
values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)‘
       
cursor.executemany(sql,
page_list)
        conn.commit()   #提交
       
cursor.close() #关闭cursor
       
conn.close()   #关闭连接
   
except Exception as e:
        print e
        conn.rollback()
#得到soup
def urlBS(url):
    response=requests.get(url)
    soup = BeautifulSoup(response.text,"lxml")
    return soup
#得到一共有多少页
def get_pagenumber(url):
    soup=urlBS(url)
    page=soup.select(‘.sort_page_num span‘)[0]
    page_contents=page.contents[1]
    pagenumber=int(page_contents.replace(‘/‘,‘‘))
    return pagenumber
#得到页面信息
def get_info(product_url):
    soup=urlBS(product_url)
    # print soup
    #get title
   
title = unicode(soup.title.text.strip().strip(u‘【价格_报价_图片_行情】-易迅网).replace(u‘,‘‘))\
        .encode(‘utf-8‘).decode(‘utf-8‘)
    #print title

#get_原价
   
try:
        soup_origin = soup.find("dl", { "class" : "xbase_item xprice xprice_origin" })
        price_origin = soup_origin.find("span", { "class" : "mod_price xprice_val" }).\
            contents[1].text.encode(‘utf-8‘).decode(‘utf-8‘)
       # print u‘原价:‘ + price_origin
   
except:
        price_origin=0
        #pass

#get 现价
   
try:
        soup_sale= soup.find(‘dl‘,{‘class‘:‘xbase_item xprice‘})
        price_sale = soup_sale.find("span", { "class" : "mod_price xprice_val" }).contents[1].encode(‘utf-8‘).decode(‘latin1‘)
        #print u‘现价:‘+ price_sale
   
except:
        price_sale=0
        #pass

#得到列名名称
   
oup_info_name=soup.find_all(‘td‘,{‘class‘:‘name‘})
    # for each in
oup_info_name:
    #    
print each.contents[0].encode(‘utf-8‘).decode(‘utf-8‘)
   
name_list=[each.contents[0].encode(‘utf-8‘).decode(‘utf-8‘) for each in oup_info_name]

#得到内容
   
soup_info_desc=soup.find_all(‘td‘,{‘class‘:‘desc‘})
    # for each in
soup_info_desc:
   
#prod_list=[soup_info_desc[0].contents[0].encode(‘utf-8‘).decode(‘latin1‘)]
   
prod_list=[each.contents[0].encode("utf-8").decode("utf-8") for each in soup_info_desc] #用列表生成式将原表格中的数据放入列表中
   
pro_dic={}
    pro_list=[today,product_url,title,price_origin,price_sale]
    #因为列名爬取数据中不分数据是没有的,通过字典的方式,把没有的数据记录为空
   
for i in range(len(name_list)):
       
pro_dic[name_list[i]]=prod_list[i]

name=[品牌,型号,颜色,能效等级,冰箱容积,制冷方式,门款式,重量,尺寸,制冷类型,
          显示方式,定频/变频,除霜模式,   冷冻室温度区间,冷藏室温度区间,冰箱冷柜机型,操作方式]

for each in name:
        try:
            each=each.encode("utf-8").decode("utf-8")
           
pro_list.append(pro_dic[each])
            # print
pro_dic[each]
       
except:
            pro_list.append(‘‘)
            # print ‘null‘

# print pro_list
    # print len(pro_list)
   
page_list.append(pro_list)

#得到商品页链接
def get_product_href(url):
    soup=urlBS(url)
    product_list=soup.select(‘#itemList .mod_goods_img a‘)
    # print
product_list
   
for i in range(len(product_list)):
        pro=product_list[i]
        pro_href=pro[‘href‘]
        # return pro_href
        #print pro_href
       
get_info(pro_href)

if __name__==‘__main__‘:
    beseurl=‘http://searchex.yixun.com/html?path=705882t705892&attr=42515e1o2o3o4o5o6o7‘
   
max_number=get_pagenumber(beseurl)
    page_list=[]
    today=datetime.date.today()     #得到当前日期,插入更新日期
   
for i in range(1,max_number+1):
    # for i in
range(1,2):
       
newurl=beseurl+‘&page=‘+str(i)
        #print newurl
        
get_product_href(newurl)

insert_db(page_list)

print("It‘s all done")

#建表
# drop table yixun_price_refrigerator;
# CREATE TABLE yixun_price_refrigerator(
# update_day date                 --
更新日期
# ,product_url    VARCHAR(300)    -- 商品链接
# ,title VARCHAR(300)  -- 名称
# ,price_origin VARCHAR(100)   -- 原价
# ,price_sale VARCHAR(100) -- 现价
# ,Brands VARCHAR(100)   -- 品牌
# ,Goods_sn VARCHAR(100)   -- 型号
# ,Colour VARCHAR(100)   -- 颜色
# ,Energy_efficiency_rating VARCHAR(100)  
--
能效等级
# ,Refrigerator_volume VARCHAR(100)  
--
冰箱容积
# ,Refrigeration VARCHAR(100)   -- 制冷方式
# ,Door_style VARCHAR(100)   -- 门款式
# ,weight VARCHAR(100)   -- 重量
# ,size VARCHAR(100)   -- 尺寸
# ,Cooling_type VARCHAR(100)   -- 制冷类型
# ,Display_method VARCHAR(100)   -- 显示方式
# ,frequency VARCHAR(100)   -- 定频/变频
# ,Defrost_mode VARCHAR(100)   -- 除霜模式
# ,Freezer_temperature_range VARCHAR(100)  
--
冷冻室温度区间
# ,Save_temperature_range VARCHAR(100)  
--
冷藏室温度区间
# ,Fridge_freezer_models VARCHAR(100)  
--
冰箱冷柜机型
# ,Operation_method VARCHAR(100)  
--
操作方式
# );

结果:

时间: 2024-08-06 13:57:27

python爬虫:爬取易迅网价格信息,并写入Mysql数据库的相关文章

python 爬虫爬取煎蛋网妹子图

首先查看js渲染前的html源码,发现放图片的位置是这样的 本该放地址的地方赫然放着blank.gif,并且在onload属性上绑定了一个jandan_load_img函数.这个jandan_load_img就成为本次爬虫的突破所在了.继续ctrl+shift+F全局搜索,找到这个函数 流程图: import hashlib import base64 from bs4 import BeautifulSoup import requests import re import random im

用Python爬虫爬取广州大学教务系统的成绩(内网访问)

用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是"选择器"."选择器"指明了{}中的"样式"的作用对象,也就是"样式"作用于网页中的哪些元素.可参考:http://www.w3school.com.cn/cssref/css_selectors.asph

python爬虫爬取微博评论案例详解

这篇文章主要介绍了python爬虫爬取微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 数据格式:{"name":评论人姓名,"comment_time":评论时间,"comment_info":评论内容,"comment_url":评论人的主页} 以上就是我们需要的信息. 具体操作流程: 我们首相将主页获取完成以后,我们就会发现,其中 的内容带有相

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

python爬虫爬取美女图片

python 爬虫爬取美女图片 #coding=utf-8 import urllib import re import os import time import threading def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImgUrl(html,src): srcre = re.compile(src) srclist = re.findall(srcre,html)

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

python爬虫—爬取英文名以及正则表达式的介绍

python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个csv文件中:再读取csv文件当中的每个英文名链接,采用循环的方法读取每一个英文名链接,根据每个英文名链接爬取每个链接中的数据,保存在新的csv文件当中. 需要写一个爬取英文名链接的函数.将爬取的内容保存在csv文件的函数以及读取csv文件内容的函数.爬取英文名详情页内容的函数. 表5.3.1 函数名

Python爬虫爬取数据的步骤

爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多网页的变化规律,基本上都是只有小部分有所变化,如:有的网页只有网址最后的数字在变化,则这种就可以通过变化数字将多个网页链接获取: 2.把获取得到的多个网页链接存入字典,充当一个临时数据库,在需要用时直接通过函数调用即可获得: 3.需要注意的是我们的爬取并不是随便什么网址都可以爬的,我们需要遵守我们的

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be