网页手机号抓取程序(学习爬虫第二周,爬取58同城手机号码,网址如下所示。)

优采云 发布时间: 2022-01-27 23:19

  网页手机号抓取程序(学习爬虫第二周,爬取58同城手机号码,网址如下所示。)

  学习爬虫第二周,爬取同城58的手机号。网址如下。

  

  网页预览.png

  根据学习情况,首先需要分析网页,观察页面结构。

  观察页面特征:

  对于*敏*感*词*的数据抓取,观察页面结构特点,编写的程序是否通用,是否可以适用于所有页面。找到边界条件,找到限制。

  其次,需要设计程序的工作流程。

  设计工作流程

  在根据页面弄清楚程序是如何设计的之后,制定有效的工作流程,保证程序在爬取过程中的高效执行。工作输出效率更稳定。

  1. 要*敏*感*词*抓取数据,我们需要知道边界在哪里。查询网页后:

  http://bj.58.com/shoujihao/pn{}.format(page)

  我们发现当输入到pn117时,页面数据不见了。

  同时,搜索网页中标题和链接的元素位置,并将捕获存储在Mongo中,其中存储了网页上所有手机号码标题的详情页的url链接。

  2.分析网页后,适合我们的网站如下:

  

  对.png

  不恰当的 网站 是这样的:

  

  错误.png

  因此,在爬取Spider2的详情页时,需要根据正确的网页结构元素进行爬取。

  同时抓取网页中需要的元素。

  代码显示如下:

  #!/usr/bin/env python

# coding: utf-8

from bs4 import BeautifulSoup

import requests

import time

import pymongo

#create the database

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

#name:Phone

Phone = client['Phone']

#table:phone_numbers 存储手机号的表

phone_numbers = Phone['phone_numbers']

#table:phone_info 详细信息

phone_info = Phone['phone_info']

#infocont > span > b

#Spider1 提取链接

def get_links_from(page):

url = 'http://bj.58.com/shoujihao/pn{}/'.format(page)

wb_data = requests.get(url)

time.sleep(1)

Soup = BeautifulSoup(wb_data.text,'lxml')

titles = Soup.select('#infolist > div > ul > div > ul > li > a.t > strong')

links = Soup.select('#infolist > div > ul > div > ul > li > a.t')

for title,link in zip(titles,links):

data = {

'title':title.get_text(),

'link':link.get('href')

}

phone_numbers.insert_one(data)

#Spider2 详细页面

def get_item_from(url):

wb_data = requests.get(url)

time.sleep(1)

Soup = BeautifulSoup(wb_data.text,'lxml')

titles = Soup.select('#main > div.col.detailPrimary.mb15 > div.col_sub.mainTitle > h1')

prices = Soup.select('#main > div.col.detailPrimary.mb15 > div.col_sub.sumary > ul > li > div.su_con > span')

for title,price in zip(titles,prices):

title = title.get_text().replace('\n','').replace('\t','').replace(' ','')

price = price.get_text().replace('\n','').replace('\t','').replace(' ','')

data = {

'title':title,

'price':price,

'url':url

}

print(data)

phone_info.insert_one(data)

for page in range(1,117): #抓取所有页面

get_links_from(page)

for info in phone_numbers.find(): #从数据库中抓取存储的url

url = info['link']

get_item_from(url)

  运行结果截图:

  phone_number 中的数据:

  

  手机号码存储表.png

  phone_info 中的数据:

  

  详情.png

  总结:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线