Week2_Practice_Final

Good_Href_2.py

函数功能:获取物品链接

from bs4 import BeautifulSoup
import  requests
import pymongo
from Judge_end2 import judge_end
import time
import random
from multiprocessing import Pool

client=pymongo.MongoClient('localhost',27017)
Ganji=client['Ganji']
ItemHref=Ganji['ItemHref']
GoodsHref=Ganji['GoodsHref']

#获取物品类别的页数
def get_Item_page(data):

    half_url=data["href"]
    flag=True
    j=0
    urls=[]
    for i in range(1,300):
        url=half_url+"o{}".format(str(i))
        if judge_end(url):
            urls.append(url)
            print(url)
            t_sleep = random.uniform(1, 3)
            time.sleep(round(t_sleep, 2))
        else:
            break

    return urls

def get_Item_Href(url,type):
    # 从数据库中获取链接
    html=requests.get(url)
    html.encoding='utf-8'
    bs_html=BeautifulSoup(html.text,'lxml')
    t_sleep=random.uniform(3,5)
    time.sleep(round(t_sleep,2))
    # 获取标题和链接
    goods=bs_html.select('#wrapper > div.leftBox > div.layoutlist > dl > dd.feature > div > ul > li > a')
    for i in goods:
        data={
            "title":i.get_text().strip(),
            "href":i.get('href'),
            "data_state":"none",
            "goods_type":type
        }
        GoodsHref.insert_one(data)

'''
   http://wh.ganji.com/guizi/o2/
   '''
# if __name__ == '__main__':
#     if GoodsHref.count()!=0:
#         GoodsHref.remove()
#     for data in ItemHref.find():
#         print(data["Item"])
#         pool=Pool()
#         urls=get_Item_page(data)
#         pool.map(get_Item_Href,urls)



# if __name__=='__main__':
    #
    # if GoodsHref.count()!=0:
    #     GoodsHref.remove()
    #
    # for data in ItemHref.find():
    #     urls=get_Item_page(data)
    #     print(urls)
    #     if len(urls)==0:
    #         for url in urls:
    #             get_Item_Href(url,data["Item"])



'''
"href" : "http://www.wh.ganji.com/motorola/"
"href" : "http://www.wh.ganji.com/shouji/_%E5%B0%8F%E7%B1%B3/"
'''
if __name__ == '__main__':
    if ItemInformation.count()!=0:
        ItemInformation.remove()
    while True:
        pool=Pool()
        pool.map(get_goods_info,GoodsHref.find())

Good_Info.py

函数功能:获取物品详细信息

from bs4 import BeautifulSoup
import  requests
import pymongo
import time
import random
from multiprocessing import Pool


client=pymongo.MongoClient('localhost',27017)
Ganji=client['Ganji']
GoodsHref=Ganji['GoodsHref']
ItemInformation=Ganji['ItemInforation']



def get_goods_info(data):

    x=data
    if x["data_state"]=="none":
        url=x['href']
        x["data_state"]=="done"
        t_sleep = random.uniform(1, 2)
        time.sleep(round(t_sleep, 2))
        html=requests.get(url)
        html.encoding='utf-8'
        bshtml=BeautifulSoup(html.text,'lxml')

        # 获取名称
        title=bshtml.select('#wrapper > div.content.clearfix > div.leftBox > div.col-cont.title-box > h1')

        title_data=title[0].get_text() if title!=[] else None

        # 获取价格
        price=bshtml.select('#wrapper > div.content.clearfix > div.leftBox > div > div > ul > li > i.f22.fc-orange.f-type')

        price_data=price[0].get_text() if price!=[] else None

        # 获取类型
        goods_type=bshtml.select('#wrapper > div.content.clearfix > div.leftBox > div > div > ul[class="det-infor"] > li > span > a')
        type_data=goods_type[0].get_text() if goods_type!=[] else None
        # 获取地点
        add=bshtml.select('#wrapper > div.content.clearfix > div.leftBox > div > div > ul > li > a')
        if len(add)>2:
            mid_add=[]
            for i in range(1,len(add)):
                if i!=len(add)-1:
                    mid_add.append(add[i].get_text())
            print(mid_add)
        else:
            mid_add=None
        add_data=mid_add

        data={
            'title':title_data,
            'price':price_data,
            'type':type_data,
            'add':add_data,
            'goods_type':data['goods_type']
        }
        ItemInformation.insert_one(data)
    else:
        pass
if __name__ == '__main__':
    if ItemInformation.count()!=0:
        ItemInformation.remove()
    while True:
        pool=Pool()
        pool.map(get_goods_info,GoodsHref.find())
    # if ItemInformation.count()!=0:
    #     ItemInformation.remove()
    # for data in GoodsHref.find():
    #     get_goods_info(data)

Item_Href.py

函数功能:获取物品类目链接

from bs4 import BeautifulSoup
import  requests
import pymongo

client=pymongo.MongoClient('localhost',27017)
Ganji=client['Ganji']
ItemHref=Ganji['ItemHref']
url_site='http://www.wh.ganji.com'

def get_item_href(url):
    html=requests.get(url)
    html.encoding='utf-8'
    bs_html=BeautifulSoup(html.text,'lxml')

    # 获取总页面的所有种类的链接
    itemHref=bs_html.select('#wrapper > div.content > div > div > dl > dd > a')
    for i in itemHref:
        href=url_site+i.get('href')
        data={
            "Item":i.get_text(),
            "href":href,
            "read_state":"none"
        }
        ItemHref.insert_one(data)

get_item_href('http://wh.ganji.com/wu/')
# 测试程序
# get_item_href('http://wh.ganji.com/wu/')

Judge_end2.py

函数功能:判断是否有下一页

import requests
from bs4 import BeautifulSoup

def judge_end(url):
    html=requests.get(url)
    html.encoding='utf-8'
    bsHtml=BeautifulSoup(html.text,'lxml')

    # 获取页面号,如果当前页面号中没有下一页,结束

    nextNum=bsHtml.select('#wrapper > div.leftBox > div.pageBox > ul > li > a > span')
    for i in nextNum:
        if i.get_text()=="下一页":
            return True
    return False

x=judge_end('http://wh.ganji.com/chuangdian/o20/')
print(x)
'''
#wrapper > div.leftBox > div.pageBox > ul > li:nth-child(6) > a > span
'''

Main.py

函数功能:获取所有商品信息

from Item_Href import get_item_href
from Goods_href import get_Item_Href
from Good_Info import get_goods_info
import pymongo
import time

client=pymongo.MongoClient('localhost',27017)
Ganji=client['Ganji']
ItemHref=Ganji['ItemHref']
ItemInformation=Ganji['ItemInforation']


def main():
    url="http://wh.ganji.com/wu/"
    get_item_href()
    get_Item_Href()
    get_goods_info()




Monitor.py

函数功能:显示数据库的存储商品信息

import pymongo
import time
client=pymongo.MongoClient('localhost',27017)
Ganji=client['Ganji']
ItemHref=Ganji['ItemHref']
GoodsHref=Ganji['GoodsHref']
ItemInformation=Ganji['ItemInforation']


def  monitor():
    while True:
        print("类别链接数——",ItemHref.count())
        print("物品链接数——", GoodsHref.count())
        print("物品详细条目数——", ItemInformation.count())
        time.sleep(5)
monitor()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 全文链接 第一章 创建一个blog应用第二章 使用高级特性来增强你的blog第三章 扩展你的blog应用第四章上 ...
    夜夜月阅读 9,976评论 27 36
  • 有了前两篇的基础,接下来通过抓取淘宝和天猫的数据来详细说明,如何通过Scrapy爬取想要的内容。完整的代码:[不带...
    Carltony阅读 14,858评论 11 23
  • 1、网络跟进沟通2人 2、团队学习 个人体会 刚刚认识葆婴的时候,就听说了一旦尝试去了解葆婴,直到完全了解,...
    葆婴USANA廖瑜阅读 322评论 0 0
  • 提起童年应该有许多美好的回忆浮现在大家眼前。美好,快乐,无忧无虑,嬉戏玩耍等词语也会从脑海中一涌而出。而我...
    芝芝1981阅读 237评论 1 3
  • 感动是什么? 只不过是 当我在雨中踽踽独行 一抬头 恰有一个人已在不远处撑伞为我等候 只不过是 当我很失落地想要藏...
    Cathy赤木与森阅读 367评论 1 5