美文网首页
Python实战:抓取商品信息并储存在mongoDB的数据库中

Python实战:抓取商品信息并储存在mongoDB的数据库中

作者: 北海牧羊人 | 来源:发表于2016-08-13 17:28 被阅读0次

    运行结果:

    详细情况:

    我的代码:

    from bs4 import BeautifulSoup
    import requests, time
    import pymongo

    client = pymongo.MongoClient("localhost", 27017) # 访问mongoDB,创建数据库和表单
    ceshi = client["ceshi"]
    url_list = ceshi["url_list"]
    item_info = ceshi["item_info"]
    #spider1
    def get_links_from(channel, pages,who_sells=0): #抓取列表页上商品的详情页链接
    #http://bj.58.com/pbdn/0/pn2/
    list_view = "{}{}/pn{}/".format(channel,str(who_sells), str(pages))
    wb_data = requests.get(list_view)
    time.sleep(1)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    if soup.find("td", "t"):
    for link in soup.select("tr.zzinfo td.t a.t"):
    item_link = link.get("href").split("?")[0]
    url_list.insert_one({"url" : item_link})
    print(item_link)
    else:
    pass #到达列表页的最后的页面下一个页面
    #spider2
    def get_item_info(url): #抓取详情页商品的信息
    wb_data = requests.get(url)
    soup = BeautifulSoup(wb_data.text, 'lxml')
    title = soup.select("div.box_left_top > h1")[0].text
    price = soup.select("span.price_now > i")[0].text
    area = soup.select("div.palce_li > span > i")[0].text
    item_info.insert_one({'title':title, 'price':price, 'area':area})
    print({'title':title, 'price':price, 'area':area})

    get_links_from("http://bj.58.com/pbdn/",2)
    for item in url_list.find():
    get_item_info(item["url"])

    总结:

    -1 调试代码时,记得注释掉创建数据库的代码。因为每次运行代码时,商品信息的字典可 能都不一样,所以它们都会被保存到数据库里,这造成了信息的重复。

    -2 详情页商品信息的抓取和列表页商品详情页链接的抓取最好分开进行。因为一来可以提高代码的执行效率,二来当详情页商品信息的抓取失败时,修改后程序可以从这里开始,而不用再下载商品信息详情页的链接,而后再进行详情页商品信息的抓取

    相关文章

      网友评论

          本文标题:Python实战:抓取商品信息并储存在mongoDB的数据库中

          本文链接:https://www.haomeiwen.com/subject/esiesttx.html