python:爬取58同城全部二手商品信息(转转网)

python_58ershou

python+beautifulsoup多线程爬取58同城二手全部商品信息,并在jupyter上将数据可视化

项目主程序在58_index中:

建立mango数据库表
#连接MongoDB数据库
client=pymongo.MongoClient('localhost',27017)
#建立learn数据库,如果没有会自动创建
learn=client['samecity58']
#创建数据表
url_list=learn['url_list1']
shop_list=learn['shop_list']
主函数:

if __name__=='__main__':
    channal_links = channal_get('http://bj.58.com/sale.shtml')
    # get_links_from(channal_links[0],1)
    # things_get('http://zhuanzhuan.58.com/detail/957912684012519433z.shtml')
    pool=Pool()
    pool.map(get_all_links_from ,channal_links)
    pool.close()
    pool.join()

Pool 可以提供指定数量的进程供用户使用,默认是 CPU 核数。当有新的请求提交到 Poll 的时候,如果池子没有满,会创建一个进程来执行,否则就会让该请求等待。
- Pool 对象调用 join 方法会等待所有的子进程执行完毕
- 调用 join 方法之前,必须调用 close
- 调用 close 之后就不能继续添加新的 Process 了

其中,使用map方法将列表channal_links(见下代码)传入get_all_links_from函数

channal_get (返回一个列表)
#获取分类链接列表
def channal_get(url):
    try:
        url_part='http://bj.58.com'
        channal_links=[]
        wb_data=requests.get(url)
        soup=BeautifulSoup(wb_data.text,'lxml')
        links=soup.select('ul.ym-submnu > li > b > a')
    except RequestException:
        print('获取分类链接失败')
    for link in links:
        channal_link=url_part+link.get('href')
        channal_links.append(channal_link)
    print('成功获取分类链接')
    return channal_links
get_all_links_from爬取多页商品url
def get_all_links_from(channel):
    for i in range(1,101):
        get_links_from(channel,i)
get_links_from
#获取分类中的商品的url,who_sell=0代表个人,1是商家
def get_links_from(channel,page,who_sell=0):
    #'http://bj.58.com/shouji/0/pn1/'
    try:
        url=channel+str(who_sell)+'/pn'+str(page)
        wb_data=requests.get(url)
        time.sleep(1)
        soup=BeautifulSoup(wb_data.text,'lxml')
    except RequestException:
        print("获取商品链接失败")
    #判断当前页码有没有有效信息
    if soup.find('td','t'):
        links=soup.select('td.t > a')
        for link in links:
            items_link=link.get('href').split('?')[0]
            #二手手机个人页面前几个是个人回收,而且链接是一个跳转首页链接,给排除掉
            if items_link.split('/')[-1] == 'jump':
                pass
            else:
                url_list.insert_one({'url': items_link})
    else:
        pass

url_list.insert_one({‘url’: items_link}):将想要的商品链接存入Mongo数据库的url_list表

things_get
#获取商品信息
def things_get(url):
    print('开始采集商品信息')

    wb_data=requests.get(url)
    time.sleep(2)
    soup=BeautifulSoup(wb_data.text,'lxml')

    try:
        titles=soup.select('.box_left_top > h1')[0].text
        price=soup.select('.price_now > i')[0].text
        place=soup.select('.palce_li > span > i ')[0].text
        scan=soup.select('p.info_p > .look_time')[0].text
        want=soup.select('p.info_p > .want_person')[0].text
    except Exception:
        print(url)
    if price=='0':
        print('商品已经下架')
    else:
        shop_list.insert_one({'title':titles,'price':price,'area':place,scan:want})

shop_list.insert_one({‘title’:titles,’price’:price,’area’:place,scan:want}):将商品信息存入Mongo数据库shop_list表

count_DB

count_DB 是个计数程序,实时监视shop_list表,查看数据库中已经存入了多少商品信息

import time
from Tao_mm import shop_list

while True:
    print(shop_list.find().count())
    time.sleep(5)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值