Python爬虫:爬取某网站关键词对应商品ID,且存入DB2数据库

公司研发不给力,我就自己写了一个,专门爬关键词对应的商品ID。

其中还学会了用Python操作DB2数据库、Python发送邮件、写日志文件、处理浏览器访问限制。

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

import requestsfrom lxml import  etreeimport ibm_dbimport loggingimport sysimport timeimport smtplib

#配置写入日志logging.basicConfig(level=logging.INFO,                format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,                datefmt=‘%a, %d %b %Y %H:%M:%S‘,                filename=‘keywords_weekly.log‘,                filemode=‘a‘)

#编码reload(sys)sys.setdefaultencoding(‘utf-8‘)

# 解决服务器限制访问问题def get_url_data(url,headers,max_tries=10):    remaining_tries = max_tries    while remaining_tries > 0:        try:            return requests.get(url,headers=headers)        except requests.exceptions:            time.sleep(60)        remaining_tries = remaining_tries - 1    raise Exception("Couldn‘t get the url_data.")

#写入db2def write_db2(resultdict):    rank=resultdict[‘rank‘]    #由于中文编码问题,关键词直接用update的方法更新  #  keywords=resultdict[‘keywords‘]    uv=resultdict[‘uv‘]    frequency=resultdict[‘frequency‘]    goods_id=resultdict[‘goods_id‘]    sql_in="insert into T_KEYWORDS_weekly(K_RANK,UV,FREQUENCY,GOODS_ID,week_YEAR)" \           " values (%r,%r,%r,%r,year(current date)||‘-‘||WEEK_ISO(current date))" % (rank,uv,frequency,goods_id)    ibm_db.exec_immediate(conn, sql_in)    ibm_db.commit(conn)

# #翻页def get_html(keywords):    #keywords="沙发"    user_agent = ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/31.0.1650.63 Safari/537.36‘    headers = { ‘User-Agent‘ : user_agent }  #网址被我隐藏了哈,可以猜猜    url=‘http://www.XXX.com/category-9999/list-p1/?fl=q&keywords=%s‘%keywords    html = get_url_data(url,headers)    html_list=[html]    selector = etree.HTML(html.text)    #page_f="http://www.meilele.com"    #得到共有多少页,循环得到各个页面的url    page_e=selector.xpath(‘/html/body/div[@class="page-panel"]/div/div/span[@class="p-info"]/b/text()‘)    if page_e:        for i in range(2,int(page_e[0])+1):            url_temp=‘http://www.meilele.com/category-9999/list-p%d/?fl=q&keywords=%s‘%(i,keywords)            html_temp=requests.get(url_temp,headers=headers)            html_list.append(html_temp)    return  html_list

# #获取内容def get_id(dictionary):    keywords=dictionary[1]    html_list=get_html(keywords)    logging.info("get the html_list %s successfully" %keywords)    for each in html_list:        html=each        selector = etree.HTML(html.text)        result={}        try:            content_field = selector.xpath(‘//*[@id="JS_list_panel"]/div[@class="w list-wrap"]/ul[@class="list-goods clearfix"]‘)[0]        except:            content_field=[]            result[‘rank‘]=str(dictionary[0])            # result[‘keywords‘]=str(keywords)            result[‘uv‘]=str(dictionary[2])            result[‘frequency‘]=str(dictionary[3])            result[‘goods_id‘]=str(‘‘)            write_db2(result)        else:            for i in range(1,len(content_field)+1):                goods_id = content_field.xpath(‘li[%d]/@data-goods-id‘%i)[0]                #return goods_id                result[‘rank‘]=str(dictionary[0])                # result[‘keywords‘]=str(keywords)                result[‘uv‘]=str(dictionary[2])                result[‘frequency‘]=str(dictionary[3])                result[‘goods_id‘]=str(goods_id)                write_db2(result)

if __name__ == "__main__":  #把密码也隐藏起来    conn=ibm_db.connect("DATABASE=aedw;HOSTNAME=miranda;PORT=50000;PROTOCOL=TCPIP;UID=miranda; PWD=miranda;", "", "")    #测试连接    try:        conn        logging.info("connect to DB2 successfully")    except:        logging.info("couldn‘t connect to DB2")    # #创建表    # sql_create=‘create table T_keywords_weekly_TEMP like V_keywords_weekly‘    # stmt_create = ibm_db.exec_immediate(conn, sql_create)    # try:    #     stmt_create    #     logging.info("create table T_keywords_weekly_TEMP successfully")    # except:    #     logging.info("couldn‘t create table T_keywords_weekly_TEMP")    # #插入表    # sql_insert="insert into T_keywords_weekly_TEMP select * from V_keywords_weekly where rank>=100"    # stmt_insert = ibm_db.exec_immediate(conn, sql_insert)    # try:    #     stmt_insert    #     logging.info("insert into T_keywords_weekly_TEMP successfully")    # except:    #     logging.info("couldn‘t insert into table T_keywords_weekly_TEMP")
sql_select="select * from T_keywords_weekly_TEMP where rank>=162"stmt_select = ibm_db.exec_immediate(conn, sql_select)try:    stmt_select    logging.info("get the data from T_keywords_weekly_TEMP")except:    logging.info("couldn‘t get the data from T_keywords_weekly_TEMP")else:    dictionary = ibm_db.fetch_both(stmt_select)    while dictionary != False:        logging.info (‘rank:‘+str(dictionary[0])+ ‘   keywords:‘+str(dictionary[1]))        get_id(dictionary)        dictionary = ibm_db.fetch_both(stmt_select)        #这一句不能少啊# 更新关键字sql_update=‘‘‘MERGE INTO T_KEYWORDS_weekly as tkmUSING T_keywords_weekly_TEMP as tkmtON tkm.K_RANK=tkmt.RANKand tkm.week_YEAR=year(current date)||‘-‘||WEEK_ISO(current date)WHEN MATCHEDTHEN  UPDATE  SET tkm.KEYWORDS=tkmt.KEYWORDSELSE IGNORE‘‘‘stmt_update=ibm_db.exec_immediate(conn, sql_update)try:    stmt_update    logging.info("update the keywords")except:    logging.info("couldn‘t update the keywords")

# sql_drop="drop table T_keywords_weekly_TEMP"# stmt_drop = ibm_db.exec_immediate(conn, sql_drop)# try:#     stmt_drop#     logging.info("drop table T_keywords_weekly_TEMP successfully")# except:#     logging.info("couldn‘t drop table T_keywords_weekly_TEMP")## ibm_db.close(conn)# logging.info("close the connect!")

# 配置发送邮件sender = ‘[email protected]‘receivers = [‘[email protected]‘]SUBJECT = "Successfully update T_KEYWORDS_weekly"TEXT = ‘‘‘    Dear miranda,        your python script of update T_KEYWORDS_weekly  of last month have successed.        may you have a good mood‘‘‘

message = """\From: %sTo: %sSubject: %s

%s""" % (sender, ", ".join(receivers), SUBJECT, TEXT)

try:    smtpObj = smtplib.SMTP(‘mail.meilele.com‘, 25)    smtpObj.sendmail(sender, receivers, message)    logging.info("Successfully sent email")except:    logging.info("Error: unable to send email" )

print(‘finish‘)
				
时间: 2024-11-06 19:16:33

Python爬虫:爬取某网站关键词对应商品ID,且存入DB2数据库的相关文章

python爬虫--爬取某网站电影下载地址

前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用到的网址仅供交流学习使用,如有不妥,请联系删除. 背景:自己有台电脑要给老爸用,老爷子喜欢看一些大片,但是家里网络环境不好,就想批量下载一些存到电脑里.但是目前大部分的网站都是这样的, 需要一个个地点进去,才能看到下载地址 如果我要下载100部电影,那肯定手都要点断了,于是便想把这些地址给爬取出来,

python 爬虫爬取 证券之星网站

周末无聊,找点乐子... #coding:utf-8 import requests from bs4 import BeautifulSoup import random import time #抓取所需内容 user_agent = ["Mozilla/5.0 (Windows NT 10.0; WOW64)", 'Mozilla/5.0 (Windows NT 6.3; WOW64)',               'Mozilla/5.0 (Windows NT 6.1) A

Python爬虫爬取豆瓣电影名称和链接,分别存入txt,excel和数据库

前提条件是python操作excel和数据库的环境配置是完整的,这个需要在python中安装导入相关依赖包: 实现的具体代码如下: #!/usr/bin/python# -*- coding: utf-8 -*- import urllibimport urllib2import sysimport reimport sslimport openpyxlimport MySQLdbimport time #from bs4 import BeautifulSoup #修改系统默认编码为utf-8

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

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

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

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

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