萌新的Python学习日记 - 爬虫无影 - 爬取58同城指定页面的内容:bj.58.com

时间:2022-05-23 04:08:05

博客第六天

测试页面:58:http://bj.58.com/pbdn/?PGTID=0d305a36-0000-1b29-d7c1-bc8b28eaff0b&ClickID=5,

目的:爬取页面中个人分类列表中每个对象的指定信息,

萌新的Python学习日记 - 爬虫无影 - 爬取58同城指定页面的内容:bj.58.com

萌新的Python学习日记 - 爬虫无影 - 爬取58同城指定页面的内容:bj.58.com

工程内容:Python3.5,jupyter notebook

工具包:requests, BeautifulSoup,

代码(不可翻页):

# 获取个人商户item
import 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结果:

萌新的Python学习日记 - 爬虫无影 - 爬取58同城指定页面的内容:bj.58.com

注:

     1. 页面随时可能刷新,故隔一段时间后再运行代码后得到的print结果可能和之前的不一样,

     2. 代码有些繁琐,因为这是练习用的,再加上网站的更新,原本目的是同时获取个人和商户列表的所有item,但是现在没办法做到。


总结:

     1. 花了很多时间,因为最开始得到的练习目标很不明确,而且开始写代码时网站应该更新过了,所以跟源代码有一定区别,

     2. 切片的使用在有些时候非常方便。