奥门美高梅手机版Python实战课程第一周笔记

   
经朋友介绍,认识到了python实战:四周实习爬虫系统,然后看了一晃试飞教程,觉得课程挺不错的,→_→重点是对此学员党有点贵啊,经过几天纠结或者决定插手这几个课程了。

    现在就不多说废话了,间接写感受,首先遵照课程要求安装lxml,Beautiful
Soup ,Requests,对了,忘记说自己的条件,WIN7
64位,python3.4版本,其实有心换MAC,奈何非大家这种普通人买的起的,所以就WIN环境先用着,因为自己提前装了PIP,安装这个都挺容易的,直接pip3
install xxxx就行了,反正自己中间没有赶上错误。

   
什么环境也准备好了,然后开基础科目,什么认识网页结构等等的就不多说了,反正自己也只是了然一下以此,说现实的也不是太懂。然后紧如果永恒网页元素了,我们重点是要上学这么些,用google
chrome浏览器中的检查,就足以查询到协会。当然刚最先都是相比较简单的,我认为是相比较好学的。

    剩下的就是import各样库,然后采取代码了:

刚起首用BeautifulSoup依然认真的打一下代码吧,soup =
BeautifulSoup(html,’lxml’)

那是soup html都是变量  lxml是分析网页用的六个库中的一个

奥门美高梅手机版 1

   
课程中所讲的节点什么的如同没什么难的,兄弟节点和父子节点应该都是足以看得懂的,只要学过高中生物遗传部分的应该都容易看懂。

   
剩下的就是温馨实际操作了,课程自带的网页就是很好的练手工具了,起初练手之后就是实战前程无忧了。

   先爬一个界面下的详细消息,源代码如下

url = 'http://bj.58.com/pingbandiannao/25853969546167x.shtml'
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')

   
url这么些不用说了,是你要拜访的地址,然后用requests获取内容储存到变量wb_data中,然后利用BeauifulSoup解析到soup变量中,然后大家来提取一下想要的始末,

title = soup.title.text
price = soup.select('#content span.price')
data = soup.select('.time')
area = soup.select('.c_25d')

   
这里就是提取想要的情节,因为标题是间接显示在网页头的,所以利用了取巧方法titile.text,价格、更新时间、还有区域是应用的查看结构的方法去获取的,最终把他们封装在字典中,

data = {
    '标题':title,
    '价格':price[0].text,
    '时间':data[0].text,
    '所属区域':list(area[0].stripped_strings) if soup.find_all('span','c_25d') else None,
    '类型':'个人'if who_selit==0 else'商家',
    '浏览次数':get_view_from(url)
}

   
因为区域部分有些网页中是不曾的,所以采纳了if作为条件判断,假诺没有就回来控制None,幼儿画就打印,至于类型部分有个if判断是前期判断抓取的数据是个体或者公司的列表所采纳,这里没什么关系。那段代码写完事后就是print打印一下内容了。

   
抓取单网页的内容就得了了,上边说一下重回到列表页面去抓当前列表的所有内容。

urls=[]
list_view = 'http://bj.58.com/pbdn/{}/pn2/'.format(str(who_selit))
wb_data = requests.get(list_view)
soup = BeautifulSoup(wb_data.text,'lxml')
for link in soup.select('td.t > a.t'):
    if str('jump') in str(link) or str('zhuanzhuan')in str(link):
        pass
    else:
        urls.append(link.get('href').split('?')[0])
return urls

先说下代码的步骤,定义下urls变量为一个列表,然后定义一下list_奥门美高梅手机版,view的情节,那里就是58额列表页面,最终的方法.format(str(who_selit)),是替换一下内容,这么些是相比较简单,who_selit变量就是要替换进去的内容,然后就是解析网页什么的,通过select查找网页结构拿到想要的网址,写个循环进入获取每个商品的网址,因为58里头有个转转界面,所以写个if判断下得到的网址,假设是转转的就pass了,不是的话参加到urls这些变量中。

   
由于浏览次数这些是JS控制的,并且和货物的URL是有必然关系的,这里我贴一下代码,这段代码我只得看懂,假诺让自己说个123还真说不出来。

id = url.split('/')[-1].strip('x.shtml')
api = 'http://jst1.58.com/counter?infoid={}'.format(id)
js = requests.get(api)
views = js.text.split('=')[-1]

到此处似乎就差不多了
封装一下各种部分,然后做个全部的顺序出来,下面贴一下完完全全的代码

#-*-coding:utf-8-*-
from bs4 import BeautifulSoup
import requests
import time

def get_urls(who_selit=0):
    urls=[]
    list_view = 'http://bj.58.com/pbdn/{}/pn2/'.format(str(who_selit))
    wb_data = requests.get(list_view)
    soup = BeautifulSoup(wb_data.text,'lxml')
    for link in soup.select('td.t > a.t'):
        #剔除转转界面
        if str('jump') in str(link) or str('zhuanzhuan')in str(link):
            pass
        else:
            urls.append(link.get('href').split('?')[0])
    return urls
    #返回所有的商品界面

def get_view_from(url):
    id = url.split('/')[-1].strip('x.shtml')
    api = 'http://jst1.58.com/counter?infoid={}'.format(id)
    js = requests.get(api)
    #获取一下浏览次数
    views = js.text.split('=')[-1]
    return views

def get_info(who_selit=0):
    urls = get_urls(who_selit)
    for url in urls:
        wb_date = requests.get(url)
        soup = BeautifulSoup(wb_date.text,'lxml')
        title = soup.title.text
        price = soup.select('#content span.price')
        data = soup.select('.time')
        area = soup.select('.c_25d')
        data = {
            '标题':title,
            '价格':price[0].text,
            '时间':data[0].text,
            '所属区域':list(area[0].stripped_strings) if soup.find_all('span','c_25d') else None,
            '类型':'个人'if who_selit==0 else'商家',
            '浏览次数':get_view_from(url)
        }
        time.sleep(0.5)
        #延迟一下 避免58的反爬虫
        print(data)
        #解析每个商品界面并且整理到字典中并且输出

get_info()

以上代码通过2016.05.06测试可以应用并且正确输出

相关文章