博客第六天
测试页面:58:http://bj.58.com/pbdn/?PGTID=0d305a36-0000-1b29-d7c1-bc8b28eaff0b&ClickID=5,
目的:爬取页面中个人分类列表中每个对象的指定信息,
工程内容:Python3.5,jupyter notebook
工具包:requests, BeautifulSoup,
代码(不可翻页):
# 获取个人商户itemimport requests,time,random
from bs4 import BeautifulSoup as bs
# url = 'http://sz.58.com/pingbandiannao/31395491489090x.shtml' #此为测试店铺商户的页面
url = 'http://zhuanzhuan.58.com/detail/828613753956597767z.shtml' #此为测试个人商户的页面
# def getitem(url): #定义函数获取单个item的信息,注:此函数这次并未使用
# web = requests.get(url) #注:此函数不包含view浏览次数
# soup = bs(web.text,'lxml')
# title = soup.select('.info_titile') #解析item名称
# price = soup.select('.price_now') #解析item价格
# area = soup.select('.palce_li > span > i') #解析item地区
# data = {
# 'title' : title[0].text,
# 'price' : price[0].text,
# 'area' : area[0].text
# }
# print(data) #print结果以便观测和修改
#注:此函数不需赋值操作,故没有设置返回
# getitem(url) #测试函数用
def getlink(sell = 0): #定义函数获取链接
urls = [] #用于存储页面所有链接
list = 'http://bj.58.com/pbdn/{}/pn2/'.format(str(sell)) #用于动态指定链接(0为个人,1为商户)
web = requests.get(list)
soup = bs(web.text,'lxml')
# links = soup.select('td.t a.t') #定位页面中的链接
for link in soup.select('td.t a.t'):
urls.append(link.get('href')) #添加函数
# print(link.get('href'))
return urls #此函数需供赋值,所以设定返回
# getlink()
# url = 'http://zhuanzhuan.58.com/detail/828613753956597767z.shtml'
def getview(url): #定义函数获取view次数
w = requests.get(url)
so = bs(w.text,'lxml')
view = so.select('span.look_time') #定位view次数位置
return view
# print(view)
# getview(url)
def getinfo(sell = 0): #定义函数获取个人商户列表页面所有item的详细信息
urls = getlink(sell) #调用函数获取该页面所有连接
for url in urls: #针对每个链接进行操作
web = requests.get(url)
soup = bs(web.text,'lxml')
title = soup.select('.info_titile') #获取item名称
price = soup.select('.price_now') #获取item价格
area = soup.select('.palce_li > span > i') #获取item地区
view = getview(url) #调用函数获取item浏览次数
data = { #格式化保存函数
'title' : title[0].text, #页面中每项内容都只有一个,使用切片加.text方法直接获取文本内容
'price' : price[0].text,
'area' : area[0].text,
'view' : view[0].text
}
print(data) #print以观察结果
getinfo() #调用函数获取目标信息
print结果:
注:
1. 页面随时可能刷新,故隔一段时间后再运行代码后得到的print结果可能和之前的不一样,
2. 代码有些繁琐,因为这是练习用的,再加上网站的更新,原本目的是同时获取个人和商户列表的所有item,但是现在没办法做到。
总结:
1. 花了很多时间,因为最开始得到的练习目标很不明确,而且开始写代码时网站应该更新过了,所以跟源代码有一定区别,
2. 切片的使用在有些时候非常方便。