美文网首页
作业:1.3

作业:1.3

作者: 云清尧 | 来源:发表于2016-07-01 10:18 被阅读0次

    <h2>代码</h2>
    <pre>
    from bs4 import BeautifulSoup
    import requests

    def get_lorder_gender(class_name):
    if class_name == ['member_boy_ico']:
    return "男"
    else:
    return "女"

    def get_links(url):
    wb_data = requests.get(url)

    请求网址

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

    解析网页

    links = soup.select('#page_list > ul > li > a')
    

    定位链接

    for link in links :
        href = link.get("href")
        get_detail_info(href)
    

    通过循环得到具体链接,并将值传递给能得到详细数据的函数

    def get_detail_info(url):
    wb_data = requests.get(url)
    soup = BeautifulSoup(wb_data.text,'lxml')

    titles = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em')
    adresses = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span.pr5')
    prices = soup.select('#pricePart > div.day_l > span')
    images = soup.select('#imgMouseCusor')
    touxiangs = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > a > img')
    names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
    genders = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span')
    
    for title,adress,price,image,touxiang,name,gender in zip(titles,adresses,prices,images,touxiangs,names,genders):
        data = {
            'title':title.get_text(),
            'adress':adress.get_text(),
            'image':image.get('src'),
            'touxiang':touxiang.get("src"),
            'name':name.get_text(),
            'gender': get_lorder_gender(gender.get('class'))
    
        }
        print(data)
    

    urls = ["http://bj.xiaozhu.com/search-duanzufang-p{}-0/".format(number) for number in range(1,10)]
    for single_url in urls:
    get_links(single_url)

    """
    titles:body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em
    adreess:body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span.pr5
    prices:#pricePart > div.day_l > span
    name:#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a
    gender:#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span
    touxiang:#floatRightBox > div.js_box.clearfix > div.member_pic > a > img
    pics:floatRightBox > div.js_box.clearfix > div.member_pic > a > img
    </pre>

    <h2>成果</h2>

    Paste_Image.png

    <h2>总结</h2>
    <p>本次作业的目标是爬取“bj.xiaozhu.com(短租网)”300个详情页中“标题、地址、租金、房源图片链接、房东图片链接、房东姓名、性别”。通过分析网页可以发现这些数据需要从2个页面中获取:</p>

    第一个是列表页:


    Paste_Image.png

    在这一页中,操作主要有:
    1.用requests请求得到该起始页
    2.用BuautifulSoup解析该网页
    3.通过观察发现,该网页的图片是同时也是链接,所以主要提取出该页所有图片的链接,并将该链接再次发送给requests和BeautifulSoup。
    4.需要翻页,也就意味着需要知道每个列表页的网址。这个网址有特定的规律,通过列表表达式循环得到:

    <pre>urls = ["http://bj.xiaozhu.com/search-duanzufang-p{}-0/".format(number) for number in range(1,10)]
    for single_url in urls:
    get_links(single_url)
    </pre>

    第二个是详情页:
    本页的操作主要有
    1.请求网址并解析
    2.观察所要爬取内容的标签,并将其记录下来。
    3.利用select方法找出这些数据,然后通过get得到具体的信息。
    4.利用循环构建字典,将其打印出来。

    <h2>反思:</h2>
    1.在初学编程的阶段,在编程前首先要思考两个问题:怎么写和些什么?把目标细化成有次序的具体步骤,然后思考一步步该如何具体实现。
    2.在编写的过程中,可以明显的感觉到python基础还不是很牢固。尤其是在循环、创建函数上,还需要重温基础。
    3.还遇到这个问题,但是不知道问题出在哪里?全部删了重写,问题解决了!

    Paste_Image.png

    相关文章

      网友评论

          本文标题:作业:1.3

          本文链接:https://www.haomeiwen.com/subject/hxaodttx.html