授業時間15第3節練習項目:賃貸情報を取得する

4868 ワード

成果

  • 個の関数を別々にテストする場合は問題ないはずです
  • 実際に捕まえる時、封禁がひどくて、多すぎるページと多すぎるテスト
  • を捕まえることができません.
  • path_detail ='./resut_detail.txt′は、すべての特定のページにキャプチャされた特定の詳細結果
  • を格納するために使用される.
  • path_links ='./resut_links.txt′は、すべての特定のページにキャプチャするアドレス
  • を格納するために使用される.
  • with open(path_detail,'a+')as textこのように書くべきかどうか分かりませんが、path_detailのファイルは上書きされ、ループ内の彼の位置が正しいかどうかは一時的に検証されていません.
  • with open(path_links,'a+')as text:同
  • コード#コード#

    from bs4 import BeautifulSoup
    import requests # s
    import time
    path_detail ='./resut_detail.txt'
    path_links ='./resut_links.txt'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
        'Cookie':'abtest_ABTest4SearchDate=b; OZ_1U_2282=vid=v7f3c69fed80eb.0&ctime=1475593887&ltime=0; OZ_1Y_2282=erefer=-&eurl=http%3A//gz.xiaozhu.com/fangzi/2303611027.html&etime=1475593887&ctime=1475593887&ltime=0&compid=2282; _ga=GA1.2.1488476801.1475593889; gr_user_id=13bbe192-e386-4074-8ca0-a4a882ba66aa; gr_session_id_59a81cc7d8c04307ba183d331c373ef6=8d7a3db1-e35f-4f23-9ce3-e73afd78b45a; __utma=29082403.1488476801.1475593889.1475594056.1475594056.1; __utmb=29082403.1.10.1475594056; __utmc=29082403; __utmz=29082403.1475594056.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'
    }
    def get_detail(url_detail='http://gz.xiaozhu.com/fangzi/2303611027.html'):
        time.sleep(15)
        code = requests.get(url_detail)
        print(code)
        web_content = requests.get(url_detail)# headers
        soup = BeautifulSoup(web_content.text,'lxml')
        titles = soup.select('div.pho_info h4 em')
        addresses = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p')
        rentals = soup.select('div.day_l')
        images = soup.select('img#curBigImage')# id ?
        landlord_photos = soup.select('div.member_pic > a > img')
        landlord_genders = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > div')
        landlord_names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
        for title, address, rental, image, landlord_photo,landlord_gender, landlord_name in zip(titles, addresses, rentals, images, landlord_photos, landlord_genders, landlord_names):
            landlord_gender = str(landlord_gender.get('class'))#str 。。
            if landlord_gender == '[\'member_ico\']':
                landlord_gender = ' '
            elif landlord_gender == '[\'member_ico1\']':
                landlord_gender = ' '
            else:
                landlord_gender = ' '
            date = {
                'title': title.get_text(),
                'address':address.get('title'),
                'rental':rental.get_text(),
                'image':image.get('src'),
                'landlord_photo':landlord_photo.get('src'),
                'landlord_gender':landlord_gender,
                'landlord_name':landlord_name.get_text()
            }
            list_value = list(date.values())
        with open(path_detail,'a+') as text:  # ??, a+?
            text.write(str(list_value)+'
    ') print(date) #get_detail() url_list = ['http://gz.xiaozhu.com/tianhe-duanzufang-p{}-8/'.format(i) for i in range(1,2)] # 2 def get_moreurls(): with open(path_links,'a+') as text: for link in url_list: time.sleep(2) web_content = requests.get(link) # headers, soup = BeautifulSoup(web_content.text, 'lxml') link_lists = soup.select('#page_list ul.pic_list.clearfix li a.resule_img_a') for detail_link in link_lists: print(detail_link.get('href')) text.write(str(detail_link.get('href')+'
    ')) # get_detail(url_detail=str(detail_link.get('href')))# get_moreurls()

    総括と問題


    1.今のところ、この採集はやはり機関車の道具を使うほうが便利だと感じていますが、機関車は動的にロードされたデータを採集するのが難しいし、自分で毛皮を学んだので、pythonはもっと数量レベルの大きいデータと他の自動処理をつかむのが得意かもしれません.例えば、私は今「今日のトップ記事」、「少しの情報」、「微博」の一部のメディアの1週間以内のすべての文章、微博の伝播と読書、インタラクティブな量を採集したいと思っています.これらのページのページは動的にロードされているので、python 2に適しているかもしれません.現在、私たちのケースは「印刷」だけで、txtやcsvに記録されていません.自分がもっと試してもいいかどうかは分かりませんが、ここで辞書を使う意味も分かりません.その実用的なlistは私たちの後続の操作(ソート、フィルタリング)を保存するのに便利です.(現在私も文字列による保存を怠っているだけで、具体的にどのような順序で操作を保存していません).現在、この宿題はまだ実際に使えるものではありません.逆登りのサイトにはあまり使いにくいです.
  • 失敗したキャプチャを自動的に再試行するにはどうすればいいですか?または次のループを繰り返して、キャプチャに失敗したリンクを記録します(try,except,finally??)
  • どうやって捕まえるの?time.sleepは後ろのマルチスレッドと矛盾しますか?小猪网これはあまりにも変态で、少しつかむと失败して、404、これは捕まえる连続の例として适していないと感じて、更に後続の逆登りの练习に适します.