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

   
课程被所提的节点什么的似乎没什么麻烦之,兄弟节点和父子节点应该如故可看得懂的,只要学过高中生物遗传有的应该还容易看理解。

   
剩下的哪怕是温馨实际操作了,课程自带的网页就是可怜好之练手工具了,初始练手之后便实战58以及城市了。

   先爬一个界面下的详细音讯,源代码如下

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测试好运用以是输出

相关文章