练习两层工作流

第一步,获取目标url存入数据库(mongoconn.py )

第二步,从数据库中读出url, 并从页面上提取目标信息(homework2_2.py )

源代码

mongoconn.py

#!usr/bin/env python

#_*_ coding: utf-8 _*_

#

# connect mongodb

import pymongo

def mongoset(db, table):

client = pymongo.MongoClient('localhost', 27017)

data = client[db]

sheet = data[table]

return sheet

def mongoinsert(table, data):

table.insert_many(data)

homework2_2.py

#!usr/bin/env python

#_*_ coding: utf-8 _*_

#

# 爬取手机号

# step1 get all urls, save them to db

# step2 get detail info by accessing those urls

from bs4 import BeautifulSoup

import requests

import time

from mongoconn import mongoset, mongoinsert

def get_soup(url):

source = requests.get(url)

soup = BeautifulSoup(source.text, 'lxml')

return soup

def combineurls(url, page):

pageurls = []

for i in range(1, page+1):

pageurl = '{}{}/'.format(url, i)

pageurls.append(pageurl)

return pageurls

def get_page_urls(url):

curpage = 1

maxpage=0

while curpage > maxpage:

maxpage = curpage

pageurl = url + 'pn' + str(maxpage)

soup = get_soup(pageurl)

pager = soup.select('div.pager > a')

pagenum = pager[len(pager)-3].select('span')[0].get_text() #### -3是临时办法, 需要再想想

curpage = int(pagenum)

urls = combineurls(url+'pn', maxpage)

return urls

def listtodict(urls):

datamany = []

for itemurl in urls:

data = {

'itemurl': itemurl

}

datamany.append(data)

return datamany

def get_item_urls(url):

soup = get_soup(url)

itemlist = soup.select('div.boxlist > ul > li > a.t')

itemurls = []

for item in itemlist:

try:

itemurl = item.get('href')

except:

pass

itemurls.append(itemurl)

time.sleep(1)

return itemurls

def getemtext(element):

return element.get_text().strip().replace('\t', '').replace('\n', '').replace(' ','')

def get_target_info(url):

soup = get_soup(item['url'])

main = soup.select('div.detailPrimary')

if main:

title = main[0].select('div.mainTitle h1')[0]

price = main[0].select('span.price')[0]

data = {

'title': getemtext(title),

'price': getemtext(price),

'url': url

}

return data

if __name__ == '__main__':

### step1, get urls and insert into mongo

table = mongoset('58sale', 'shoujihaourl')

url = 'http://bj.58.com/shoujihao/'

pageurls = get_page_urls(url)

for url in pageurls:

mongoinsert(table, listtodict(get_item_urls(url)))

### step2, get detailed info

table = mongoset('58sale', 'shoujihaourl')

tinfo = mongoset('58sale', 'shoujihaoinfo')

data = table.find()

for item in data:

info = get_target_info(item['url'])

if info:

if not tinfo.count({'url': item['url']}): #to filter out duplication info

print(info)

tinfo.insert_one(info)

time.sleep(1)

处理url与mongodb相关的操作分开。用from mongoconn import mongoset, mongoinsert引入mongo相关的函数。

运行结果

step1: ‘shoujihaourl’表中存储目标url

Screen Shot 2016-06-30 at 8.44.59 PM.png

step2: 'shoujihaoinfo'表中存储提取到的详细信息

Screen Shot 2016-06-30 at 8.43.17 PM.png

总结

分层处理爬取任务,将已经获取到的信息储存起来,省时省力

python 爬手机号_Python爬虫实战笔记_2-2 爬取手机号相关推荐

  1. python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细

    前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...

  2. python 简单网页_Python爬虫 (一):爬取一个简单的静态网页

    版本:python3.7 平台:windows10 工具 :pycharm 断断续续学习了py3爬虫2周左右的时间,发现自己学习的过于零散化,所以想通过这个专栏系统的整理下自己所学过的知识.如有错误, ...

  3. python绘画海贼王_Python爬虫实战之(三)| 一个海贼迷的呐喊

    作者:xiaoyu 微信公众号:Python数据科学 知乎:Python数据分析师 <10> 海贼王已经10年了,一路陪伴了我们的点点滴滴.它热血,激情,感人,欢乐,吸引了无数男女老少的紧 ...

  4. python百度云盘采集_Python爬虫实战:抓取并保存百度云资源(附代码)!

    寻找并分析百度云的转存api 首先你得有一个百度云盘的账号,然后登录,用浏览器(这里用火狐浏览器做示范)打开一个分享链接.F12打开控制台进行抓包.手动进行转存操作:全选文件->保存到网盘-&g ...

  5. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

  6. Python爬虫实战系列(一)-request爬取网站资源

    Python爬虫实战系列(一)-request爬取网站资源 python爬虫实战系列第一期 文章目录 Python爬虫实战系列(一)-request爬取网站资源 前言 一.request库是什么? 二 ...

  7. python爬虫实战(一)--爬取知乎话题图片

    原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...

  8. python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片

    随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...

  9. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

最新文章

  1. Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤
  2. 为“证明实力”,某医院前网管离职后远程入侵服务器,致诊疗系统瘫痪
  3. node+ejs模板引擎的应用
  4. 由浅入深:自己动手开发模板引擎——置换型模板引擎(二)
  5. 【数据结构与算法】之深入解析“罗马数字转整数”的求解思路与算法示例
  6. python数据库操作框架_python bottle 框架操作数据库
  7. Docker最全教程——从理论到实战(七)
  8. autocomplete 属性 清除input框输入存留历史值,防止下拉历史值显示
  9. delphi webbrowser 对象不支持_建模初学者,那些你可能还不知道的10个ZBrush小技巧!【值得收藏】...
  10. Apache Tomcat 安装配置图文详细教程
  11. 运维工程师到底是做什么的?
  12. 【图像边缘检测】基于matlab插值法亚像素边缘检测【含Matlab源码 306期】
  13. RandomAccessFile 随机读写文件
  14. Camera相机研发介绍
  15. CTFshow 2022 菜狗杯 WEB WP补充
  16. 字符移动,大写字母后移且保持相对位置不变、调整顺序奇数位于偶数之前
  17. Http/Https代理Python实现
  18. android ios 垃圾回收,iOS 面试题(16):解释垃圾回收的原理
  19. 抖音小程序可做类目--资讯
  20. 东数西算下,液冷数据中心为何日趋重要?

热门文章

  1. java计算机毕业设计高校实习实训管理系统(附源码、数据库)
  2. 《超预测》菲利普•泰洛克 epub+mobi+azw3
  3. 一招让你的百度云资源下载速度快10倍!
  4. 直播视频跨浏览器预览方案(ffmpeg+VideoJS+H5)
  5. 国家标准《智能服务 预测性维护 通用要求》
  6. Error: (vlog-7) Failed to open design unit file “d:/ethe
  7. python机器学习常用模型
  8. in作为介词的用法_中考英语知识点:介词in的常见用法
  9. HUNNU java HttpClient 自动刷英语网课源码
  10. Photoshop的10大奇技巧