python 爬手机号_Python爬虫实战笔记_2-2 爬取手机号
练习两层工作流
第一步,获取目标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 爬取手机号相关推荐
- python实例豆瓣音乐代码_Python爬虫实战(3)-爬取豆瓣音乐Top250数据(超详细
前言 首先我们先来回忆一下上两篇爬虫实战文章: 第一篇:讲到了requests和bs4和一些网页基本操作. 第二篇:用到了正则表达式-re模块 今天我们用lxml库和xpath语法来爬虫实战. 1.安 ...
- python 简单网页_Python爬虫 (一):爬取一个简单的静态网页
版本:python3.7 平台:windows10 工具 :pycharm 断断续续学习了py3爬虫2周左右的时间,发现自己学习的过于零散化,所以想通过这个专栏系统的整理下自己所学过的知识.如有错误, ...
- python绘画海贼王_Python爬虫实战之(三)| 一个海贼迷的呐喊
作者:xiaoyu 微信公众号:Python数据科学 知乎:Python数据分析师 <10> 海贼王已经10年了,一路陪伴了我们的点点滴滴.它热血,激情,感人,欢乐,吸引了无数男女老少的紧 ...
- python百度云盘采集_Python爬虫实战:抓取并保存百度云资源(附代码)!
寻找并分析百度云的转存api 首先你得有一个百度云盘的账号,然后登录,用浏览器(这里用火狐浏览器做示范)打开一个分享链接.F12打开控制台进行抓包.手动进行转存操作:全选文件->保存到网盘-&g ...
- Python 爬虫实战,模拟登陆爬取数据
Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...
- Python爬虫实战系列(一)-request爬取网站资源
Python爬虫实战系列(一)-request爬取网站资源 python爬虫实战系列第一期 文章目录 Python爬虫实战系列(一)-request爬取网站资源 前言 一.request库是什么? 二 ...
- python爬虫实战(一)--爬取知乎话题图片
原文链接python爬虫实战(一)–爬取知乎话题图片 前言 在学习了python基础之后,该尝试用python做一些有趣的事情了–爬虫. 知识准备: 1.python基础知识 2.urllib库使用 ...
- python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片
随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...
- python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息
Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...
最新文章
- Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤
- 为“证明实力”,某医院前网管离职后远程入侵服务器,致诊疗系统瘫痪
- node+ejs模板引擎的应用
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(二)
- 【数据结构与算法】之深入解析“罗马数字转整数”的求解思路与算法示例
- python数据库操作框架_python bottle 框架操作数据库
- Docker最全教程——从理论到实战(七)
- autocomplete 属性 清除input框输入存留历史值,防止下拉历史值显示
- delphi webbrowser 对象不支持_建模初学者,那些你可能还不知道的10个ZBrush小技巧!【值得收藏】...
- Apache Tomcat 安装配置图文详细教程
- 运维工程师到底是做什么的?
- 【图像边缘检测】基于matlab插值法亚像素边缘检测【含Matlab源码 306期】
- RandomAccessFile 随机读写文件
- Camera相机研发介绍
- CTFshow 2022 菜狗杯 WEB WP补充
- 字符移动,大写字母后移且保持相对位置不变、调整顺序奇数位于偶数之前
- Http/Https代理Python实现
- android ios 垃圾回收,iOS 面试题(16):解释垃圾回收的原理
- 抖音小程序可做类目--资讯
- 东数西算下,液冷数据中心为何日趋重要?
热门文章
- java计算机毕业设计高校实习实训管理系统(附源码、数据库)
- 《超预测》菲利普•泰洛克 epub+mobi+azw3
- 一招让你的百度云资源下载速度快10倍!
- 直播视频跨浏览器预览方案(ffmpeg+VideoJS+H5)
- 国家标准《智能服务 预测性维护 通用要求》
- Error: (vlog-7) Failed to open design unit file “d:/ethe
- python机器学习常用模型
- in作为介词的用法_中考英语知识点:介词in的常见用法
- HUNNU java HttpClient 自动刷英语网课源码
- Photoshop的10大奇技巧